繁体   English   中英

Java代码的等效Scala代码不起作用(方法签名无效)

[英]Equivalent Scala code of Java code not working (method signature not valid)

我正在使用JUNG2库,以便可以可视化创建的神经网络系统。

首先,我遵循了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);

现在是Scala中的等效代码:

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)

在Scala示例中,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示例运行正常。

gh ...不可思议。 在尝试了2个小时后,我发布了问题,我自己找到了答案。 这可能是所谓的门把手效应。

当在.scala文件中键入Double时它将变成scala.lang.Double (当然),而我上面的方法需要java.lang.Double 因此,可以通过将其更改为此来解决:

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

尽管Java和Scala可以互换,但是您必须非常小心地使用Java和Scala相同名称的类。 如果您在没有Java知识的情况下对Scala进行编程,则可能很难解决此问题。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM