为什么Java中的`(T)this`不能在scala中工作?
给定以下Java类定义:
class Base {
int value;
public <T extends Base> T self() {
return (T) this;
}
}
class Derived extends Base {}
这段Java代码编译得很好:
new Derived().self();
但此Scala代码无法运行:
(new Derived).self(); // runtime error
时间错误:
java.lang.ClassCastException: Derived cannot be cast to scala.runtime.Nothing$
为什么它不工作,以及如何修复它
# 1 楼答案
在scala中,这个方法看起来像}
self[T <: Base](): T
。在(new Derived).self()
中,您没有指定T
。它的意思是最具体的类型^{所以
(new Derived).self()
实际上是(new Derived).self[Nothing]()
你可以试试
(new Derived).self[Derived]()
或val d: Derived = (new Derived).self()
# 2 楼答案
我觉得你写错代码了。我在JDK1.6中进行了测试
一切都好
但是
(new Derived).self();
给出了编译错误