2
類層次結構中的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
爲什麼不能斯卡拉解決Kluster對象同時實現了集羣和分類層次接口?
當然,我這樣做。這是來自Apache Mahout 0.7代碼庫的簡化代碼。我正在嘗試從Scala使用它。 – tuxdna
Scala應該與Java兼容。我想還有更多的不兼容性Scala和Java。 – tuxdna
是的,Scala應該(並且實際上)與Java兼容。兼容性水平是一個問題。 Java中的幾個設計決定無法在Scala中以一種理智的方式得到支持,而不會破壞某些東西,因此Java的這些部分被認爲不是很重要,而且Scala不支持它們。其中一個特性是靜態繼承。 Scala沒有靜態的概念,並且繼承靜態成員在Java中是非常罕見的用例,所以它在Scala中不被支持。 –