集合排序泛型类型 java
Collections sort generics types java
我一直在寻找问题的答案。我发现了很多类似的主题,但我仍然不知道该怎么做。
我有一个 class 我想将对象存储在已排序的 ArrayList 中。
例如,我创建了这个 class:
public class Kwadrat implements Comparable<Kwadrat> {
private int a;
public Kwadrat(int a){
this.a = a;
}
public int get_size(){
return a*a;
}
public int compareTo(Kwadrat b){
if(b.get_size() > get_size()){
return -1;
}
if(b.get_size() < get_size()){
return 1;
}
return 0;
}
}
这是我的 Sort
class:
public class Sort <T> {
ArrayList<T> arraylist;
public Sort(){
arraylist = new ArrayList<T>();
}
public void add(T element){
arraylist.add(element);
Collections.sort(arraylist);
}
}
Collections.sort(arraylist);
仍然告诉我 "no instance(s) of type variable(s) T
exists so that T conforms to Comparable<? super T>
".
将 public class Sort <T> {
行中的 T
更改为 T extends Comparable<T>
,因为该方法需要 <T extends Comparable<? super T>>
参数。
您的 Sort
class 目前对其类型参数 T
没有限制,因此它可以是任何类型,甚至不是 Comparable
的类型。它会接受 Object
,而不是 Comparable
。因为没有界限,而且因为编译器发现可以传递给单参数的内容是有界限的 Collections.sort
method,所以你的编译器错误。
您应该在 T
上创建与 Collections.sort
期望相同的边界。
public class Sort <T extends Comparable<T>> {
甚至更好:
public class Sort <T extends Comparable<? super T>> {
我一直在寻找问题的答案。我发现了很多类似的主题,但我仍然不知道该怎么做。
我有一个 class 我想将对象存储在已排序的 ArrayList 中。
例如,我创建了这个 class:
public class Kwadrat implements Comparable<Kwadrat> {
private int a;
public Kwadrat(int a){
this.a = a;
}
public int get_size(){
return a*a;
}
public int compareTo(Kwadrat b){
if(b.get_size() > get_size()){
return -1;
}
if(b.get_size() < get_size()){
return 1;
}
return 0;
}
}
这是我的 Sort
class:
public class Sort <T> {
ArrayList<T> arraylist;
public Sort(){
arraylist = new ArrayList<T>();
}
public void add(T element){
arraylist.add(element);
Collections.sort(arraylist);
}
}
Collections.sort(arraylist);
仍然告诉我 "no instance(s) of type variable(s) T
exists so that T conforms to Comparable<? super T>
".
将 public class Sort <T> {
行中的 T
更改为 T extends Comparable<T>
,因为该方法需要 <T extends Comparable<? super T>>
参数。
您的 Sort
class 目前对其类型参数 T
没有限制,因此它可以是任何类型,甚至不是 Comparable
的类型。它会接受 Object
,而不是 Comparable
。因为没有界限,而且因为编译器发现可以传递给单参数的内容是有界限的 Collections.sort
method,所以你的编译器错误。
您应该在 T
上创建与 Collections.sort
期望相同的边界。
public class Sort <T extends Comparable<T>> {
甚至更好:
public class Sort <T extends Comparable<? super T>> {