java - Scala访问继承Java类的静态成员

标签 java scala

考虑以下类:

//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/

相关文章:

java - 在 Eclipse RCP 应用程序中拖放会导致屏幕闪烁

java - Android RecyclerView 和 onBindViewHolder

java - 单击运行 JS 函数清除表单的按钮后, View 无法恢复

java - DBCP2 - 何时从池中删除空闲连接

java - 比特流客户端 : ttorrent doesn't work

scala - 有没有一种方法可以在build.sbt中定义所需的sbt版本?

java - 脚本每次对多个请求使用相同的名称,而不是每个请求使用不同的名称

scala - 需要帮助找出 Scala 编译器错误

scala - 将 `T[_ <: U]` 转换为 `T[U]`

scala - 您可以删除 Lift CRUDify 表单上的 "View/Edit/Delete"链接吗?