Java 泛型类型元素的ArrayList-可以完成吗?

Java 泛型类型元素的ArrayList-可以完成吗?,java,generics,arraylist,collections,Java,Generics,Arraylist,Collections,我有这个界面: public interface Carriable { public abstract String getName(); } 以及实现此接口的两个类:Passenger和CargoItem public class Passenger implements Carriable public class CargoItem implements Carriable 我还有一个舱室,可以是乘客型或货物型,而不是两者都有,并且有一些可携带物品(乘客/货物) 公共舱 {

我有这个界面:

public interface Carriable
{
    public abstract String getName();
}
以及实现此接口的两个类:Passenger和CargoItem

public class Passenger implements Carriable 
public class CargoItem implements Carriable
我还有一个舱室,可以是乘客型或货物型,而不是两者都有,并且有一些可携带物品(乘客/货物)

公共舱
{
...    
私人ArrayList所有可携带物品;
...
}
所有这些都在问题状态网中明确规定。 现在我想创建一个具有“一些独特的链接隔间”的Ship类。我想写

public class Ship
{
 private Set<Compartment<T extends Carriable>> allComaprtments;
}
公共级船舶
{
私人设置所有配置;
}
以便能够添加两种不同类型的隔室。为什么不允许这样做?另一种方法是什么

更新:
我希望能够添加特定类型的隔室,例如:

Compartment<Passenger> oneComp= new Compartment();  

this.allComaprtments.add(oneComp);
隔间oneComp=新隔间();
此.allcomports.add(oneComp);

只要您对获取返回的子类型没有真正的兴趣,您可以使用以下方法:

public class Ship
{
 private Set<Compartment<? extends Carriable>> allComaprtments;
}
公共级船舶
{

private Set您已经在舱室声明中指定T扩展可携带。您是否可以使用类似private Set AllComaProtations;?该集合应为Set类型,且船舶类别应为泛型。它不会生成错误,但我不知道如何添加passeger或cargo类型的舱室。它不允许以下操作机翼:隔间oneComp=新隔间();this.allComaprtions.add(oneComp);您以前没有声明泛型类型
T
,因此无法在字段描述中使用它。我不确定您希望如何使用此集合,因此您可能希望
set编辑您的问题。不要在注释中发布代码和错误消息。set非常正确。我只想在详细性方面出错。如果我必须在最后找出纽约的乘客舱和船上有多少个货舱?最好的方法是给你的
一个返回相应
等级的方法,并根据这些方法进行计数。
public class Ship
{
 private Set<Compartment<? extends Carriable>> allComaprtments;
}