2012-08-02 114 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