微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Scala无法解析继承的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中,您使用对象和导入.但是Scala没有静态字段的概念-它具有对象,它们可以正确地参与继承.用适当的面向对象的系统来统一Java中的静态字段是不可能的,因此在Scala中,您不能使用子类的静态成员(字段和方法).

另请参见here.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐