2011-03-17 88 views
5

我目前正在学习scala。
为什么这个代码不工作:Scala泛型 - 为什么我不能在泛型类中创建参数化对象?

class GenClass[T](var d : T) { 
    var elems: List[T] = Nil 
    def dosom(x: T) = { 
    var y = new T() 
    y 
    } 
} 

我得到: 错误:所需的类类型而T3发现
到位变种Y的 - 新T()

是它是因为从Java删除类型?有什么办法可以解决这个问题 - 在泛型函数内部创建类型T的变量?

+2

是的。这是来自Java根源的限制。我通常使用“构造函数”(例如作为ctor参数传递),例如'()=> T',但可能有一些更好的方法。 – 2011-03-17 08:35:33

+0

是的 - 对我来说这个解决方案看起来足够简单。 – 2011-03-17 14:25:30

+0

[如何在Scala中实例化类型实例所代表的类型实例](http://stackoverflow.com/questions/1305563/how-to-instantiate-an-instance-of-type-represented-by- type-parameter-in-scala) – 2011-11-09 20:08:05

回答

2

因为你不能肯定总是有一个公共的无参数构造函数。

+0

太+1。但在一般情况下,知道T的运行时类型是什么知道的。 Scala 2.8为这部分问题引入了“通用”清单解决方案。 – 2011-03-17 16:21:37

+0

即使你有清单,也不一定有给定签名的构造函数,或者任何; 'T'可能是一个特质! – Raphael 2011-03-17 17:49:38

+0

是的 - 但泛型编程背后的想法是不解决所有问题(例如:类型一致性)。例如在C++中,我们可以简单地使用模板来做所有事情。 – 2011-03-17 21:17:12

相关问题