java - 为什么 Java 中的 `(T)this` 不能在 Scala 中工作?

标签 java scala types

给定这些 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

Rumtime 错误:

java.lang.ClassCastException: Derived cannot be cast to scala.runtime.Nothing$

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

最佳答案

在 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() .

关于java - 为什么 Java 中的 `(T)this` 不能在 Scala 中工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16410604/

相关文章:

javascript - 具有键值 NaN 属性的异常数组,包含更多数组?

java - 尝试在 Android 中获取所有 SMS 消息时出现 NullPointerException

scala - Any 类型的表达式不符合预期的 type_$1

scala - 如何在scala上使用表测试?

types - OCaml 中的依赖类型

python - 如何快速将 '001100' 之类的字符串转换为 numpy.array([0,0,1,1,0,0])?

如果只有一个客户端并且需要完整的对象读取,Java NIO 的优势

java - 如何查找 OpenId 提供商支持哪些属性扩展?

java - Java中的Float.valueOf(String arg)四舍五入问题

scala - 在 REPL 中除以零时省略了哪些 28 帧?