Scala无法解析inheritance的Java接口常量成员
Java中的类层次结构:
接口: 集群 , 分类
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对象同时实现Cluster和Classify接口的层次结构?
你知道将常量放入接口以在实现类中使用它们是不好的方法,不是吗? 在Java中,您使用带有私有构造函数的final
类,并使用import static
来缩短常量名称(如果需要)。 在Scala中,您使用object
和导入。 但是Scala没有静态字段的概念 – 它有对象而不是正确地参与inheritance。 使用适当的面向对象系统将Java中的静态字段统一是不可能的,因此在Scala中,您不能使用子类中的静态成员(字段和方法)。
另见这里 。