我正在阅读这本书http://algs4.cs.princeton.edu/home/,我认为将Go中的示例作为学习练习来实现会很好,但是该书使用Java作为其语言来描述。
第一章中的一章讨论了设置一些核心数据类型/容器样式类以供以后重用,但是我很难将它们设置为Go设置,这主要是因为这些数据类型似乎喜欢使用Java泛型。
例如,我编写了以下代码
package bag
type T interface{}
type Bag []T
func (a *Bag) Add(t T) {
*a = append(*a, t)
}
func (a *Bag) IsEmpty() bool {
return len(*a) == 0
}
func (a *Bag) Size() int {
return len(*a)
}
从某种意义上说,这可以正常工作,我可以将项目添加到中,Bag并检查其大小和所有内容。但这也意味着以下代码是合法的
a := make(bag.Bag,0,0)
a.Add(1)
a.Add("Hello world!")
a.Add(5.6)
a.Add(time.Now())
我只是想知道是否有任何强制类型的方式,使其符合类似于以下内容的合同
Bag<T> bagOfMyType = new Bag<T>()
例如
Bag<Integer> bagOfInts = new Bag<Integer>()
我知道Go没有泛型,并且它们并不是真正的The Go Way,但我只是想知道是否有可能在编译时“强制”执行任何操作(可能没有)
四季花海
相关分类