关于 Java 中的泛型,我有很多很多问题,但这个问题我仍然很困惑。我希望我的标题能够恰本地表达我对这行代码的疑问。我看到的文本中已经提供了这一点,但没有解释为什么要以这种方式完成。
T[] result = (T[]) new Object[numberOfEntries];
基本上,这一行位于通用 Array Bag
的方法内实现一个接口(interface)。以下是它的完整方法:
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
的新实例该方法所在的类?
如果有人需要进一步的解释/代码,我很乐意提供。但我认为这种用泛型分配和转换项目的做法很常见,但我不明白其背后的原因。
最佳答案
Java 不允许您一步创建泛型数组。相反,您必须创建一个泛型扩展类型的数组(在本例中为 Object)并强制转换类型。
您需要一个 T[]
作为 toArray()
方法的返回类型。
关于java - 带括号的新通用赋值的目的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35249172/