有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

为什么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$

为什么它不工作,以及如何修复它


共 (2) 个答案

  1. # 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. # 2 楼答案

    我觉得你写错代码了。我在JDK1.6中进行了测试

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

    一切都好

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