4

鉴于这些 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$

为什么它不起作用,以及如何解决它?

4

2 回答 2

4

在 scala 中,这种方法看起来像self[T <: Base](): T. 在(new Derived).self()您没有指定T. 这意味着最具体的类型 - Nothing

(new Derived).self()实际上也是如此(new Derived).self[Nothing]()

你可以试试(new Derived).self[Derived]()val d: Derived = (new Derived).self()

于 2013-05-07T03:36:43.483 回答
0

我认为你写错了代码。我在 JDK 1.6 中进行了测试。

new Derived().self();
(new Derived()).self();

一切正常。

但是(new Derived).self();给出编译错误!

于 2013-05-07T05:43:42.070 回答