java - Scala 无法解析继承的 Java 接口(interface)常量成员

标签 java oop scala interface

Java 中的类层次结构:

接口(interface):集群分类

Kluster 类层次结构如下所示

Cluster  <- ,
            +-- Kluster
Classify <- '

文件:oop/Cluster.java

package oop;

public interface Cluster {
    public String HELLO = "hello";
}

文件:oop/Kluster.java

package oop;

interface Classify {
    public String GOODBYE = "good bye";
}

public class Kluster implements Cluster, Classify {

}

文件:oop/KlusterMain.java

package oop;

public class KlusterMain {
    public static void main(String[] args) {
        System.out.println(Kluster.HELLO);
        System.out.println(Kluster.GOODBYE);
    }
}

到目前为止,一切都按预期进行。我可以打印 HELLO 和 GOODBYE 常量。

现在,当我尝试从 Scala 编译器访问它们时,出现错误。

文件:oop/cluster.scala

package oop

object cluster {
  def main(args: Array[String]) {
    val k = new Kluster
    println(Cluster.HELLO)
    println(Classify.GOODBYE)
    println(Kluster.HELLO) // <- this is the problematic line
  }
}

错误:

Scala Problem
value HELLO is not a member of object oop.Kluster
/scala-snippets/src/main/scala/oop/cluster.scala
line 8

为什么 Scala 不能解析 Kluster 对象同时实现 ClusterClassify 接口(interface)的层次结构?

最佳答案

您知道将常量放入接口(interface)中以在实现类时使用它们是一种糟糕的方法,不是吗?在 Java 中,您使用带有私有(private)构造函数的 final 类,并在需要时使用 import static 来缩短常量名称。在 Scala 中,您使用 object 和导入。但是 Scala 没有静态字段的概念——它有正确参与继承的对象。将 Java 中的静态字段与适当的面向对象系统统一起来是不可能的,因此在 Scala 中,您不能使用子类中的静态成员(字段和方法)。

另见 here .

关于java - Scala 无法解析继承的 Java 接口(interface)常量成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22628298/

相关文章:

java - 多个模块,每个模块在 gradle 中使用 spring 提供休息服务

java - LibGDX 中 music.class 的 TweenAccessor

c++ - 为什么类不能继承其父类的成员类型?

javascript - 在原型(prototype)中的 $.ready 中使用 "this"

scala - 从相同特征派生的案例类的模式匹配

java - Thymeleaf 呈现空白页面

java - 将类对象列表映射到另一个列表

oop - 域驱动的设计概念

scala - 选择排序通用类型实现

list - 将项目添加到不可变的 Seq