考虑以下类:
//A.java:
public interface A {
public static final String HIGHER = "higher";
}
//B.java:
public class B implements A {
public static final String LOWER = "lower";
}
在 java 代码中,我可以访问 HIGHER 和 LOWER 字段:
//JavaClient.java:
public class JavaClient {
public static void main(String[] args) {
System.out.println(B.HIGHER);
System.out.println(B.LOWER);
}
}
但我不能在 Scala 中做同样的事情!
//ScalaClient.scala:
object ScalaClient {
def main (args: Array[String]) {
println(B.HIGHER) // Compilation error
println(B.LOWER) // OK
}
}
这让我很意外。为什么 Scala 看不到继承的 psf 字段?如何解决?
注意:在我的真实代码中,我无权访问接口(interface) A,因为它 protected 并嵌套在另一个类中。
最佳答案
只需访问 HIGHER
作为 A.HIGHER
。就Scala而言,Java中的static
成员是伴生对象的成员,B
的伴生对象不会扩展A<的伴生对象
:这就是您不能使用 B.HIGHER
的原因。
Note: In my real code I don't have access to interface A, since it is protected and nested in another class.
但是,在这种情况下,您遇到了问题。我能想到的一件事是从 Java 代码中显式公开常量,例如(假设您可以更改 B
):
public class B implements A {
public static final String LOWER = "lower";
public static final String HIGHER1 = HIGHER;
}
关于java - Scala访问继承Java类的静态成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33722471/