2011-10-13 56 views
1

我有以下问题:我有一个泛型类叫做Generic<A>和这个类的某些情况下,可以说当存储在列表中时是否可以检索泛型?

Generic<String> foo; 
Generic<Double> bar; 

,我把它们放到像这样的列表:

List<Generic<?>> list; 
list.add(foo); 
list.add(bar); 

现在我想读取返回A的方法,但是我只获得Object作为返回类型,并且我知道为什么,因为?在列表的通用类型中。我也知道List<Generic<String>>是一个完全不同的类型比List<Generic<Double>> ...但是有什么样的List结构或泛型类型参数,我可以用来保持通用类的类型相同?它在我的程序中没有问题投给我,因为我还为我的列表中的每个实例保存了一个ID,现在可以确定哪种类型在那里,但这看起来有点脏......

回答

0

你必须在某个时刻投:(

一个很好的方式
+0

是的,我认为这是唯一的方法 – reox

0

那么,如果你想whant一个常见的类型,你应该使用Object或者一些包装你的东西的类。如果你使用Object,那么只需检查你的方法中的对象instanceof你做的东西

0

你是否必须使用?或者你能否改变你的代码来使用List<Generic<T>>来保持类型?

如果你想与一些内容初始化的List后检查的类型,你可以使用list.get(0).getClass()获得一些信息,但是这并不是真正的编程

+0

是的,我可以用什么的getClass或的instanceof但是这是不是真的有什么,我想......想我会用20种或更多目前存在的类型,即将是一个长,如果,例如lse如果列表... – reox

+1

不,不像instanceof你可以使用getClass保存类型,并使用一个新的实例检查它== – Hachi

1

难道这个你正在寻找?:

public <T> T someMethod(List<Generic<T>> list){ 
     //Return an element from list 
} 
+0

好吧这和铸造直接一样好... – reox

+0

它不是那种肮脏的XD(你也必须编写这个类型,但是这个方法可以被重用)。 –

相关问题