A.java
public class A implements Comparable { private String id; private String name; public A(String a, String b) { id = a; name = b; } public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int compareTo(Object o) { A a = (A) o; return id.compareTo(a.getId()); } }
B.java
public class B implements Comparable { private String b_id; private String other; public B(String a, String b) { b_id = a; other = b; } public String getBId() { return b_id; } public void setBId(String id) { this.b_id = id; } public String getOther() { return other; } public void setOther(String other) { this.other = other; } public int compareTo(Object o) { B b = (B) o; return b_id.compareTo(b.getId()); } }
Learn.java
public class Learn { public static void main(String[] args) { List<A> listA = new ArrayList<A>(); List<B> listB = new ArrayList<B>(); List<Object> listAll = new ArrayList<Object>(); listA.add(new A("aa", "bb")); listA.add(new A("ae", "bbn")); listA.add(new A("dfr", "GSDS")); listB.add(new B("nm", "re")); listB.add(new B("asd", "asfa")); listAll.addAll(listA); listAll.addAll(listB); Collections.sort(listAll); for (Object o : listAll) { if (o instanceof A) System.out.println(o.getId); else if (o instanceof B) Syatem.out.println(o.getBId); } } }
我得到的错误就在这行Collections.sort(listAll); 。
Collections.sort(listAll);
Bound mismatch: The generic method sort(List<T>) of type Collections is not applicable for the arguments (List<Object>). The inferred type Object is not a valid substitute for the bounded parameter <T extends Comparable<? super T>>
该怎么办?其他逻辑还可以吗?
我想做的是有一个A列表和一个B列表,其中一个属性与id相同;尽管变量名不同。即id在A和bid在B。现在我将两个列表都放在ListAll中,并在相同的变量id / bid上对它们进行排序。我有A和B实现可比性。
id
A
bid
和我的listAll是对象类型?
我该怎么做?谢谢。
您可以添加一个通用基类并在那里进行比较,如下所示:
abstract class AandBComparable implements Comparable { public int compareTo(Object o) { AandBComparable ab = (AandBComparable) o; return getId().compareTo(ab.getId()); } public abstract String getId(); }