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();

すべてOKです。

しかし(new Derived).self();、コンパイルエラーが発生します!

于 2013-05-07T05:43:42.070 に答える