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

标签 java scala methods method-signature

我正在使用 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 示例运行完美。

最佳答案

呃……难以置信。当我在尝试 2 小时后发布问题时,我自己找到了答案。这大概就是所谓的门 Handlebars 效应....

当在 .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,这个问题可能很难解决。

关于java - Java 代码的等效 Scala 代码不起作用(方法签名无效),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11777798/

相关文章:

java - 在Java中调用获取时间的方法

java - JOptionPane错误-乌龟和野兔赛跑

python - 查看python中所有继承的类

java - 在 Java 中使用 Bag

java - 我的 ByteToMessageDecoder 类中存在内存泄漏

scala - 在 Slick 2.0 中插入后返回 AutoInc ID

scala - 基于scala中变量类型的条件

scala - 在 Scala 中高效检索 ArrayStack 的最后一个和倒数第二个元素?

java - MultipartFile 文件名中的特殊字符转换为?在 Spring 启动

java - 其类中的子类列表