java - 带括号的新通用赋值的目的

标签 java generics

关于 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/

相关文章:

java - 用于编辑与其他元素中包含的名称和值相同的单个子元素的 xpath 查询

java - 通用断言失败

java - 如何在 Scala 中从 JSON 解析通用类参数?

java - 封装 JDBC 结果集

kotlin - 当 T 为类型 "Nothing"时,通用参数需要类型 "Any"

ios - 在 Swift 中遍历 View Controller 层次结构

java - 为什么不使用 Set<String> set = new HashSet() 而不是 Set<String> set = new HashSet<String>()?

java - 无法建立 SSL 通信黑白客户端进程和 MQ 系列

java - Spring 3.1.x 里程碑存储库

java - 如何使用 f :ajax? 使 jsf 更改按下按钮后呈现的内容