2014-03-25 47 views
1

我有一个类ArraySort用下面的代码使用可比接口

private Comparable<Object> a[]; 
private int nElems; 

public ArraySort(int length) 
{ 
    this.a = new Comparable[length]; 
    this.nElems =0; 
} 

为什么Java的发出警告,在此声明

this.a = new Comparable[length]; 

它发出如下警告的警告

Type safety: The expression of type Comparable[] needs unchecked conversion to conform to Comparable<Object>[] 

我知道它只是一个警告,但我很想知道原因

谢谢

+5

使用泛型类型的数组是个坏主意。 –

+2

你声明一个'Comparable []',然后将它实例化为一个'Comparable []'。这不明显吗? – 2rs2ts

+1

你有没有想过让这个泛型类?我认为这样会更顺利。 –

回答

5

这是因为Java不支持通用对象的数组。具体而言,这是你想要写什么,但下面的代码将无法编译

this.a = new Comparable<Object>[length]; // <<== Does not compile!!! 

这样做的一个简单的解决方法是切换到List<Comparable<Object>>:没有效率的损失,编译器会能够为您进行类型检查:

private List<Comparable<Object>> a; 
... 
this.a = new ArrayList<Comparable<Object>>(length);