实际参数...无法通过方法调用转换转换为...

时间:2016-08-08 19:33:54

标签: java generics gradle wildcard method-invocation

我正在为Minecraft游戏制作一个mod。 使用Eclipse一切正常,编译是成功的,我可以使用我创建的mod玩游戏。 但是当我使用gradle编译代码时,我收到此错误:

C:\Users\Alexandre\MCForge\ForgeCreeperHeal\debug\build\sources\main\java\fr\eyzox\dependencygraph\DependencyGraph.java:31: error: method buildIndex in class DataKeyProvider<K> cannot be applied to given types;
                        node.keyProvider.buildIndex(index, node);
                                        ^
  required: Map<KEY,DependencyGraph<KEY,? extends IData<KEY>>.Node>,DependencyGraph<KEY,? extends IData<KEY>>.Node
  found: Map<KEY,DependencyGraph<KEY,DATA>.Node>,DependencyGraph<KEY,DATA>.Node
  reason: actual argument Map<KEY,DependencyGraph<KEY,DATA>.Node> cannot be converted to Map<KEY,DependencyGraph<KEY,? extends IData<KEY>>.Node> by method invocation conversion
  where KEY,DATA,K are type-variables:
    KEY extends Object declared in class DependencyGraph
    DATA extends IData<KEY> declared in class DependencyGraph
    K extends Object declared in class DataKeyProvider

我不明白为什么它适用于Eclipse,但不适用于gradle。 也许这是pur java的泛型误解,但我对此表示怀疑,因为Eclipse中的所有工作都很好。 这是我身边的错误还是我应该寻找一个gradle插件错误? 我是gradle的初学者。

可能需要源代码和build.gradle才能理解我的问题。 我在这里创建了一个回购:https://github.com/RedRelay/FCH_DEBUG

编辑:这似乎是与Eclipse相关的问题。我刚刚学习Eclipse有自己的编译器,它似乎允许这个而不是标准的javac。

1 个答案:

答案 0 :(得分:0)

Eclipse有自己的编译器,允许它而不是标准的javac编译器。我已经改变了

protected abstract void buildIndex(final Map<K, DependencyGraph<K, ? extends IData<K>>.Node> index, final DependencyGraph<K, ? extends IData<K>>.Node theNode) throws DuplicateKeyException;  至 protected abstract <D extends IData<K>> void buildIndex(final Map<K, DependencyGraph<K, D>.Node> index, final DependencyGraph<K, D>.Node theNode) throws DuplicateKeyException; 它现在有效。