gpt4 book ai didi

java - 类型为 java.lang.String 的类 MyJavaClass 中的值 foo 在 Java 类和 Scala 特征中具有不兼容的类型混合

转载 作者:行者123 更新时间:2023-11-30 06:34:53 24 4
gpt4 key购买 nike

我有一个 Scala 特质

trait MyTrait{  
val foo: String
def bar = foo
}

和一个提供 foo 的 Java 类

public class MyJavaClass {
public final String foo = "hello";
}

现在我尝试将它们混合

class MyScalaClass extends MyJavaClass with MyTrait { 
}

它不会编译

overriding value foo in trait MyTrait of type String;  value foo in class MyJavaClass of type java.lang.String has incompatible type.

我已经尝试了所有看似合理的 vals、vars 和 defs 组合,但找不到任何编译此配置的方法。

如何为 Java 类提供 trait 的 val?

最佳答案

我认为这是因为 Scala 为“公共(public)”变量生成 getter 和 setter - 变量本身始终是私有(private)的,但是 scalac 使它们看起来好像可以公开访问。

换句话说,我相信你在特征中的 val foo: String 声明实际上等同于:

// def foo_=(s: String)  // setter - would apply to var declarations
def foo: String // getter

因此您需要提供一个实现 foo方法 的 Java 类,而不是公开一个公共(public)变量

关于java - 类型为 java.lang.String 的类 MyJavaClass 中的值 foo 在 Java 类和 Scala 特征中具有不兼容的类型混合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6608548/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com