Java 如何使用单个类型参数为泛型类型指定两个具体类型参数?

Java 如何使用单个类型参数为泛型类型指定两个具体类型参数?,java,generics,Java,Generics,社区。我有以下情况。我使用的是java集合,比如说接口。它是一个通用接口,其元素具有类型参数E。在我的例子中,我知道要插入的元素的类型,但问题是要插入两种类型的元素。假设我有A类和B类,它们没有任何共同点。A和B最近的共同祖先是类。类型A和B不是由我定义的,因此我无法更改类型层次结构。如果我这样定义我的列表: List<A> list = new ArrayList<>(); List<B> list = new ArrayList<>();

社区。我有以下情况。我使用的是java集合,比如说接口。它是一个通用接口,其元素具有类型参数E。在我的例子中,我知道要插入的元素的类型,但问题是要插入两种类型的元素。假设我有A类和B类,它们没有任何共同点。A和B最近的共同祖先是类。类型A和B不是由我定义的,因此我无法更改类型层次结构。如果我这样定义我的列表:

List<A> list = new ArrayList<>();
List<B> list = new ArrayList<>();
List List=new ArrayList();
那么只允许类型A的元素,如果我这样定义它:

List<A> list = new ArrayList<>();
List<B> list = new ArrayList<>();
List List=new ArrayList();
那么只允许使用B类元素。有没有什么方法可以进行逻辑OR运算?如何指定我只需要类型A或类型B的元素而不需要其他元素?或者java的方法是:

List<Object> list = new ArrayList<>();
List List=new ArrayList();

当我执行任何列表操作时,要自己检查类型?

出于您的目的,您需要类似于union类型的东西,Java没有提供。你自己给出了答案:如果你不能修改层次结构,甚至不能让A和B实现同一个接口,那么你就必须使用
列表
,自己做额外的类型检查。

好吧,你自己回答了这个问题,除非A和B在Object之前都有一个共同的超类。。在哪种情况下,你能解释这个的实际用途吗?当您将这些对象从集合中取出时,您将如何处理它们?将它们转换为A或B?好吧,您确实可以实现自己的列表接口。我认为使用泛型不会有太大的价值,因为。你可以用自定义类型包装元素,但这个解决方案有点麻烦。@JamesMontagne,实际上,当取出元素时,元素被传递给一个实用方法,该方法使用它们的toString、equals和hashCode方法。到目前为止,我可以使用列表。问题是这3个方法在类A和类B中被重写,我必须确保列表中只允许这两种类型的对象。A类和B类共享行为,但不是接口。