为什么我收到警告[未经检查]未经检查的转换?

时间:2017-08-27 17:00:03

标签: java warnings unchecked-conversion

任何人都可以在下面的陈述中指出我所遗漏的内容吗? 警告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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

因为您使用的是通用数据结构,并且您的变量与您收到警告的确切通用类型不匹配。更准确的说,它发生在右侧泛型类型不同或左侧泛型类型的子类型时。

例如,如果你有:

List<String> x;

如果您执行以下操作:

x = new ArrayList();

您将收到未经检查的警告,因为x的泛型类型(即String)与右侧泛型类型{{1}不同或超类型这是List的默认值。

答案 2 :(得分: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”)可以解决此问题。