java - 将不同类型的对象与可比较的对象进行比较

标签 java list collections comparable

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());
    }
}

学习.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); 它说。

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 相同;虽然变量名不一样。即A中的id和B中的bid。 现在我将两个列表放入 ListAll 中,并在同一变量 id/bid 上对它们进行排序。 我让 A 和 B 实现了 Comparable。

我的 listAll 是 Object 类型?

我该怎么做? 谢谢。

最佳答案

您可以添加一个公共(public)基类并在那里实现比较,如下所示:

abstract class AandBComparable implements Comparable {

  public int compareTo(Object o) {
    AandBComparable ab = (AandBComparable) o;
    return getId().compareTo(ab.getId());
  }

  public abstract String getId();
}

关于java - 将不同类型的对象与可比较的对象进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11901072/

相关文章:

java - 更新 android studio 和新的 sdk 后得到 "Error:Execution failed for task ' :app:processDebugGoogleServices'. 我该如何解决?

java - 出于单元测试的目的,哪个内存中 Java 数据库最接近 MySQL 和 SqlServer?

java - 如何获取对 DLL 的 java JNA 调用以获取参数中返回的数据?

list - Haskell 中埃拉托斯特尼优化筛

c# - 有什么东西可以在 C# 中实现快速随机访问列表吗?

python - 如何快速查单?

java - 集合子类型 - Liskov 替换原则

Java 排序集合实现,允许许多相等的值

java - 使用 Mockito 模拟 HttpURLConnection 的问题

java - 哪些 Java 集合(和映射)可以按上次访问排序