我对Java中的泛型有很多很多问题,但我仍然对此感到困惑。我希望我的标题恰当地传达了我对这一行代码的问题。这已在我看到的文本中提供,但没有解释为什么以这种方式完成。
T[] result = (T[]) new Object[numberOfEntries];
基本上,这一行是在实现接口的通用Array Bag
的方法中。以下是完整的方法:
public class Set<T> implements SetInterface<T>{
... //more methods for this Array-Bag
public T[] toArray(){
T[] result = (T[]) new Object[numberOfEntries];
for (int index = 0; index < numberOfEntries; index++){
result[index] = setArray[index];
}
return result;
}
}
此方法用于返回数组的给定副本。但我不明白为什么在result
之前将(T[])
投放到new Object[numberOfEntries]
并进行分配。我理解,因为这是一个创建为Set<T>
的类,<T>
所有的(字符串集,整数集等)取代<T>
。但是以这种方式调用它的目的是什么?另外,为什么它是一个新的Object
而不是Set
类的新实例?
如果有人需要进一步的解释/代码,我会乐意提供。但我认为这种用泛型分配和铸造物品的做法很常见,但我不明白其背后的原因。
答案 0 :(得分:1)
Java不允许您一步创建通用数组。相反,你必须创建一个泛型扩展类型的数组(在本例中为Object)并转换类型。
您需要T[]
作为toArray()
方法的返回类型。