2011-04-07 92 views
1

当用户单击确定时,我想打开一个配置屏幕并发回它的数据。java泛型的问题 - 当类型是未知的对象类型时创建一个通用列表

我的这些对象作为配置

configObjA a; 
configObjB b; 

两个实施IDisplayable(我的接口)。 现在congfig屏幕获取两个ArrayList并将它们放入JList GUI中。 它将JList放置在数据模型中。

当我从屏幕返回时,我想发送主屏幕的结果。 所以我再次重申的数据模型,并把它全部回到一个ArrayList

的问题是主屏幕犯规了解 什么有什么办法我配置屏幕会返回一个类型,主屏幕会知道?

我想回去 public List getOptionsList() 并在方法中我将创建一个我发送的类型的列表。 (我将不得不保持我发送的类型)。那有什么好处?如何在类型未知时创建通用列表
对象类型?任何建议?

btw:我的愚蠢gui过程是不是太简单需要复杂?

回答

6

如何在类型为未知对象类型时创建通用列表?

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

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

List<IDisplayable> l; 

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

List<Object> l; 

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

1

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

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

当然,使用这种方法,则该方法必须知道的类型,也只能把这种类型的对象英寸


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