Java:声明具有多个泛型的变量;“限制”;在他们身上

Java:声明具有多个泛型的变量;“限制”;在他们身上,java,generics,Java,Generics,我有一堆java类,它们都实现了一个名为IdObject的接口(指定一个getId()方法)。此外,它们还都实现了与自身可比的类型参数,因此它们都与自身可比 我要做的是声明一个此类对象的列表,填充它,然后对其进行排序并对其调用getId()。因此,我的代码如下所示: List<? extends IdObject & Comparable<?>> objectList = null; if (foo) { objectList = new ArrayLi

我有一堆java类,它们都实现了一个名为IdObject的接口(指定一个getId()方法)。此外,它们还都实现了与自身可比的类型参数,因此它们都与自身可比

我要做的是声明一个此类对象的列表,填充它,然后对其进行排序并对其调用getId()。因此,我的代码如下所示:

List<? extends IdObject & Comparable<?>> objectList = null;

if (foo) {
    objectList = new ArrayList<TypeA>();
    ...
} else if (bar) {
    objectList = new ArrayList<TypeB>();
    ...   
}

if (objectList != null) {
    Collections.sort(objectList);
    for (IdObject o : objectList) {
        System.out.println(o.getId());
    }
}
List<? extends MyInterface> objectList = null;
List>objectList=null;
如果(foo){
objectList=新的ArrayList();
...
}否则,如果(巴){
objectList=新的ArrayList();
...   
}
if(objectList!=null){
Collections.sort(objectList);
对于(IdObject o:objectList){
System.out.println(o.getId());
}
}
基本上,我的问题在于第一行——我想为类型指定两个“约束”,因为我需要第一个来确保我可以在循环中打印ID,第二个来确保我可以在列表中使用Collections.sort()

第一行不编译

有没有一种方法可以在不指定泛型类型而不指定类型参数和使用未选中的操作的情况下实现这一点?我在网上也找不到这样的例子


问候语

创建另一种类型如何

public CompIdObject extends IdObject implements Comparable {
...
}
在泛型中使用这种类型

List<? extends CompIdObject<?>> objectList = null; 
List>objectList=null;
列表>
恐怕这种类型的签名只能在类和方法签名中使用

因此,我想最接近的方法就是定义一个接口:

public interface MyInterface extends IdObject, Comparable<MyInterface>
公共接口MyInterface扩展了IdObject,可比较
然后像这样声明您的列表:

List<? extends IdObject & Comparable<?>> objectList = null;

if (foo) {
    objectList = new ArrayList<TypeA>();
    ...
} else if (bar) {
    objectList = new ArrayList<TypeB>();
    ...   
}

if (objectList != null) {
    Collections.sort(objectList);
    for (IdObject o : objectList) {
        System.out.println(o.getId());
    }
}
List<? extends MyInterface> objectList = null;

List我以前也想在字段上做类似的事情,但做不到(也许有人可以详细说明这是技术限制还是设计选择,我不确定。)


未来的方向是设计一个扩展IdObject和Comparable的接口,然后在泛型列表定义中使用它。

警告:您的CompIdObject没有声明为泛型。与其说
MyInterface
,不如说
compableidObject
。您真的希望实现
MyInterface
的每个类都可以相互比较吗?如果没有,请尝试
公共接口MyInterface扩展IdObject,Compariable
List>objectList
@finnw您真的。。。不,我没有,这不是我的阶级结构。但我同意你的解决方案