0

谁能指出我在以下陈述中遗漏了什么?
警告 1

 prog.java:16: warning: [unchecked] unchecked conversion
        adj = new LinkedList[v];
              ^
  required: LinkedList<Integer>[]
  found:    LinkedList[]

警告 2

prog.java:18: warning: [unchecked] unchecked conversion
            adj[i] = new LinkedList();
                     ^
  required: LinkedList<Integer>
  found:    LinkedList

警告 3

prog.java:43: warning: [unchecked] unchecked call to push(E) as a member of the raw type Stack
        stack.push(new Integer(v));
                  ^
  where E is a type-variable:
    E extends Object declared in class Stack

帮我恢复这个警告。在此先
感谢 PC :- keep_smiling

4

3 回答 3

0

就放

@SuppressWarnings("unchecked") 

在你的方法之上;

例如:

class Graph { 
    private int V;
    private LinkedList <Integer> adj[]; 

    @SuppressWarnings("unchecked")
    Graph(int v) { 
       V = v; 
       adj = new LinkedList[v];
       for (int i=1; i<=v; i++) 
          adj[i] = new LinkedList<Integer>(); 
    } 
}

这里有一个问题,当我们使用

adj = new LinkedList<Integer>[v]; rather than adj = new LinkedList[v]

编译器抛出错误不能使用泛型,因此通过添加上述条件 @SuppressWarnings("unchecked") 解决了这个问题。

于 2020-03-12T19:47:49.950 回答
0

警告 1 和 2 出现是因为您没有正确使用泛型。将您的 LinkedList 转换为泛型类型而不是原始类型,例如LinkedList <Integer>.

我不能告诉你第三个,因为你应该提供代码模板。

于 2017-08-27T17:09:38.213 回答
0

因为您使用的是泛型数据结构,并且您的变量与您收到警告的确切泛型类型不匹配。更准确地说,当右侧泛型类型与左侧泛型类型不同或不是左侧泛型类型的子类型时,就会发生这种情况。

例如,如果您有:

List<String> x;

如果您执行以下操作:

x = new ArrayList();

您将收到未经检查的警告,因为x的泛型类型,即String,与右侧泛型类型Object不同,也不是 List 的默认类型的超类型。

于 2017-08-27T17:14:14.443 回答