【问题标题】:Generics method not applicable for the arguments泛型方法不适用于参数
【发布时间】:2012-10-01 13:31:16
【问题描述】:

我在Graph<T> 类中有一个Node<T>(内部)类:

public class Graph<T> {
    private ArrayList<Node<T>> vertices;
    public boolean addVertex(Node<T> n) {
        this.vertices.add(n);
        return true;
    }
    private class Node<T> {...}
}

当我运行这个时:

Graph<Integer> g = new Graph<Integer>();
Node<Integer> n0 = new Node<>(0);
g.addVertex(n0);

最后一行给我错误:

The method addVertice(Graph<Integer>.Node<Integer>) in the type Graph<Integer> is not applicable for the arguments (Graph<T>.Node<Integer>)

为什么?先谢谢了?

【问题讨论】:

  • 什么语言?我猜是 C#,但可能还有其他具有相同(或相似)语法的人。
  • 你在哪里定义了addVertice?我们在示例中看不到它。
  • 你应该将Node类设为static
  • @astander 我重新编辑了代码。抱歉错了>
  • 那是因为如果它不是静态的,你需要一个外部类的对象来创建一个内部类的对象。

标签: java generics


【解决方案1】:

您的内部类不应覆盖T,因为T 已在外部类中使用。考虑一下如果允许的话会发生什么。您的外部类会引用Integer,而内部类会引用另一个类,对于同一个实例也是如此。

 public boolean addEdge(Node node1, Node node2) {
        return false;
    }

    Graph<Integer> g = new Graph<Integer>();
    Graph<Integer>.Node n0 = g.new Node(0);// As T happens to be integer you can use inside node class also.

    public class Node {
        T t;
        Node(T t) {
        }
    }

或者您可以使用Static Inner class,因为静态泛型类型不同于实例泛型类型。

更多解释可以参考JLS # 4.8. Raw Types

【讨论】:

    【解决方案2】:

    以下代码对我来说很好。在 JRE 1.6 上运行

    public class Generic<T> {
        private ArrayList<Node<T>> vertices = new ArrayList<Node<T>>();
    
        public boolean addVertice(Node<T> n) {
            this.vertices.add(n);
            System.out.println("added");
            return true;
        }
    
    
        public static class Node<T> {
        }
    
        public static void main(String[] args) {
            Generic<Integer> g = new Generic<Integer>();
            Node<Integer> n0 = new Node<Integer>();
            g.addVertice(n0);
        }
    
    
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-11-17
      • 2018-12-21
      • 1970-01-01
      相关资源
      最近更新 更多