2012-08-02 112 views
1

我正在使用JUNG2庫,以便可以看到我創建的神經網絡系統。Java代碼的等效Scala代碼不起作用(方法簽名無效)

首先,我是繼從JUNG2代碼示例,我使用下面的Java代碼:

DirectedSparseMultigraph<Integer, Integer> graph = new DirectedSparseMultigraph<Integer, Integer>();   
DelegateForest<Integer, Integer> delf = new DelegateForest<Integer, Integer>(); 
Factory<Tree<Integer, Integer>> delt = DelegateTree.<Integer, Integer>getFactory(); 
Transformer<Integer, Double> trans = new Transformer<Integer, Double>() { 
    @Override 
    public Double transform(Integer arg0) { 
     return 1.0; 
    } 
};  
MinimumSpanningForest2<Integer, Integer> prim = new MinimumSpanningForest2<Integer, Integer>(graph, delf, delt, trans); 

現在的等效代碼斯卡拉:

var graph = new DirectedSparseMultigraph[Int, Int] 
var delf = new DelegateForest[Int, Int]() 
var delt = DelegateTree.getFactory[Int, Int]() 
var trans = new Transformer[Int, Double] { 
    def transform(input:Int):Double = { 
    return 1.0 
    } 
} 
var prim:MinimumSpanningForest2[Int, Int] = new MinimumSpanningForest2(graph, delf, delt, trans) 

在斯卡拉例如MinimumSpanningForest2的實例化在Eclipse中給我一個很長的錯誤:

overloaded method constructor MinimumSpanningForest2 with alternatives: 
(edu.uci.ics.jung.graph.Graph[V,E],edu.uci.ics.jung.graph.Forest[V,E],org.apache.commons.collections15.Factory[_ <: 
edu.uci.ics.jung.graph.Graph[V,E]],org.apache.commons.collections15.Transformer[E,java.lang.Double])edu.uci.ics.jung.algorithms.shortestpath 
.MinimumSpanningForest2[V,E] <and> 
(edu.uci.ics.jung.graph.Graph[V,E],org.apache.commons.collections15.Factory[edu.uci.ics.jung.graph.Forest[V,E]],org.apache.commons.collecti 
ons15.Factory[_ <: 
edu.uci.ics.jung.graph.Graph[V,E]],org.apache.commons.collections15.Transformer[E,java.lang.Double])edu.uci.ics.jung.algorithms.shortestpath 
.MinimumSpanningForest2[V,E] cannot be applied to (edu.uci.ics.jung.graph.DirectedSparseMultigraph[Int,Int], 
edu.uci.ics.jung.graph.DelegateForest[Int,Int], org.apache.commons.collections15.Factory[edu.uci.ics.jung.graph.Tree[Int,Int]], java.lang.Object 
with org.apache.commons.collections15.Transformer[Int,scala.Double]) 

我一直在尋找年齡,但無法看到問題。查看Collections和JUNG2的API文檔我很確定這種泛型是正確的。 JAVA例子工作完美無瑕。

回答

6

呃......不可思議。正如我在2小時tryig後發佈的問題,我自己找到了我的答案。這大概就是所謂的門把手效果....

當在.scala文件這成爲打字scala.lang.Double(ofcourse),而我上面的方法需要的java.lang雙。因此,它是由它改變這種解決:

var transformer = new Transformer[Int, java.lang.Double] { 
    def transform(input:Int):java.lang.Double = { 
    return 1.0 
    } 
} 

雖然Java和Scala是可以互換的,你必須非常小心與Java和Scala同名類。如果你想在沒有Java知識的情況下編程Scala,那麼這個問題可能很難解決。

+0

Scala的double的正確的FQN是'scala.Double'。我會編輯這個,但是這個改變是在SO的編輯長度要求之下。 – Rhysyngsun 2012-08-02 20:26:49