带括号的新通用赋值的用途

时间:2016-02-07 02:56:21

标签: java generics

我对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类的新实例?

如果有人需要进一步的解释/代码,我会乐意提供。但我认为这种用泛型分配和铸造物品的做法很常见,但我不明白其背后的原因。

1 个答案:

答案 0 :(得分:1)

Java不允许您一步创建通用数组。相反,你必须创建一个泛型扩展类型的数组(在本例中为Object)并转换类型。

您需要T[]作为toArray()方法的返回类型。