Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/359.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
泛型和创建可比较对象(Java)_Java_Generics_Comparable - Fatal编程技术网

泛型和创建可比较对象(Java)

泛型和创建可比较对象(Java),java,generics,comparable,Java,Generics,Comparable,被阅读?是创建新的可比较对象还是实现可比较接口的新对象 newcomparable[N]创建一个包含N元素的数组,这些元素可以容纳Comparable或Comparable的任何子类型。没有创建任何可比较的,只创建一个数组 对于强制转换,通常如果您执行类似于(String[])new Comparable[N]的操作,您将得到一个ClassCastException,因为它不是有效的强制转换。但是,对T[]的强制转换未选中,这意味着它不会发生在强制转换表达式所在的特定点上。相反,在您的Array

被阅读?是创建新的可比较对象还是实现可比较接口的新对象

newcomparable[N]
创建一个包含
N
元素的数组,这些元素可以容纳
Comparable
Comparable
的任何子类型。没有创建任何可比较的,只创建一个数组

对于强制转换,通常如果您执行类似于
(String[])new Comparable[N]
的操作,您将得到一个
ClassCastException
,因为它不是有效的强制转换。但是,对
T[]
的强制转换未选中,这意味着它不会发生在强制转换表达式所在的特定点上。相反,在您的
ArrayHeap
类之外的其他地方,有一些代码如下:

 heap = (T[]) new Comparable[capacity];
ArrayHeap<String> h = ...;
String s = h.get(...);
因此,我们可以说这有点像
(T[])
演员阵容被移动了


然而,问题是,当你做
(t[])新的可比[N]
时,你实际上并没有得到一个
t[]
。您只是在某种程度上欺骗编译器,以便在
ArrayHeap
类的主体中提供更好的静态类型检查。如果您试图将
Comparable[]
作为
T[]
返回到外部世界,您将得到一个异常。

new Comparable[N]
创建一个包含
N
元素的数组,该数组可以容纳
Comparable
Comparable
的任何子类型。没有创建任何可比较的,只创建一个数组

对于强制转换,通常如果您执行类似于
(String[])new Comparable[N]
的操作,您将得到一个
ClassCastException
,因为它不是有效的强制转换。但是,对
T[]
的强制转换未选中,这意味着它不会发生在强制转换表达式所在的特定点上。相反,在您的
ArrayHeap
类之外的其他地方,有一些代码如下:

 heap = (T[]) new Comparable[capacity];
ArrayHeap<String> h = ...;
String s = h.get(...);
因此,我们可以说这有点像
(T[])
演员阵容被移动了


然而,问题是,当你做
(t[])新的可比[N]
时,你实际上并没有得到一个
t[]
。您只是在某种程度上欺骗编译器,以便在
ArrayHeap
类的主体中提供更好的静态类型检查。如果您试图将
Comparable[]
作为
T[]
返回到外部世界,您将得到一个异常。

它正在创建一个可以容纳
Comparable
对象的数组。重要的一点是,数组只允许容纳
可比较的
对象<代码>新对象[容量]
将允许容纳任何内容

您真正想要的是一个
T[]
——这意味着数组仅限于容纳堆应该使用的特定类型
T
——但这是不可能的,因为Java的泛型是如何工作的()。由于要实现
Comparable
,需要
T
,因此下一个最好的方法是一个
Comparable
数组


不过,这仍然很尴尬,编译器会警告您将
Comparable
用作原始类型。最好将
定义为一个
列表
,并用
新的ArrayList(capacity)
初始化它

它正在创建一个可以容纳
可比较的
对象的数组。重要的一点是,数组只允许容纳
可比较的
对象<代码>新对象[容量]
将允许容纳任何内容

您真正想要的是一个
T[]
——这意味着数组仅限于容纳堆应该使用的特定类型
T
——但这是不可能的,因为Java的泛型是如何工作的()。由于要实现
Comparable
,需要
T
,因此下一个最好的方法是一个
Comparable
数组

不过,这仍然很尴尬,编译器会警告您将
Comparable
用作原始类型。最好将
堆定义为
列表
,并用
新的ArrayList(capacity)
初始化它