java泛型问题 - 当类型是未知对象类型时创建泛型列表

时间:2011-04-07 07:07:31

标签: java generics

我想打开配置屏幕,并在用户点击确定后发回数据。

我将这些对象作为配置

configObjA a;  
configObjB b;

两者都实现IDisplayable(我的界面)。 现在,congfig屏幕获得两个ArrayLists并将它们放入JLists gui中。 它迭代了JList并将它们放在datamodel中。

当我从屏幕返回时,我想向主屏幕发送结果。 所以我重新迭代数据模型并将其全部放回到arraylist

问题是主屏幕对此一无所知 有没有办法我的配置屏幕会返回主屏幕会知道的类型?

我想回来了     public List getOptionsList() 在方法中,我将创建一个我发送的类型的列表。 (然后我必须保留我发送的类型)。那有什么好处吗?如何在类型未知的情况下创建通用列表 对象类型?有什么建议吗?

顺便说一下:对于那种简单的需求,我的愚蠢的gui过程是不是很复杂?

2 个答案:

答案 0 :(得分:6)

  

当类型是未知对象类型时,如何创建通用列表?

你做不到。通用列表的重点在于您在编译时知道对象类型,以便编译器可以检查您对该列表的使用情况。

如果你至少知道一个父类或接口(实际上是通常的情况),你可以使用它:

List<IDisplayable> l;

如果它可以是任何类型的对象,则只能说

List<Object> l;

将接受任何类型的Object,但删除了进行有意义的编译时类型检查的可能性。

答案 1 :(得分:1)

您可以创建未知类型的通用列表,但不能将对象放在其中。

public <T> List<T> makeList() {
    return new ArrayList<T>();
}

当然,使用此方法的方法必须知道类型,并且只能放入此类型的对象。


在您的情况下,问题似乎是您想要滥用JList作为数据容器。它不是,它是一个视图组件。为您的逻辑使用真实的数据结构,并将其包装在ListModel中,为列表提供要显示的数据。