的類型,我有一個ArrayList<Container>
,然而,Container
可以Container<String>
,Container<Integer>
等,而迭代ArrayList中,我需要找出它是什麼類型的容器,並作出相應的反應。我知道java有類型擦除,但是有沒有辦法預先存儲類型並在以後檢索?像得到非齊次容器的元素
public T type;
,並使用它以後如
container.type A = container.dosomething();
的類型,我有一個ArrayList<Container>
,然而,Container
可以Container<String>
,Container<Integer>
等,而迭代ArrayList中,我需要找出它是什麼類型的容器,並作出相應的反應。我知道java有類型擦除,但是有沒有辦法預先存儲類型並在以後檢索?像得到非齊次容器的元素
public T type;
,並使用它以後如
container.type A = container.dosomething();
變量的類型是編譯時的概念。其目的僅僅是爲了讓編譯器確定該變量或表達式允許哪些操作。因此,「在編譯時不知道的類型」是完全沒有用的,因爲編譯器不知道什麼可以用它來完成。所以變量也可以輸入Object
。
在運行Java不繼續泛型類型的信息。發生類型刪除,並且所有容器都被認爲是相同的運行時類型。使用反射可以獲得有關泛型的信息,但這種努力很少值得。您應該考慮重新設計代碼,或者在容器中的元素上使用getClass()
來確定容器中實際元素的類型。
創建自己的容器類型,保留類的副本是一個重新設計的例子,你可能會考慮。 – RudolphEst 2013-03-05 14:30:43
一個ArrayList是什麼?提供更多的代碼肯定會有所幫助。 – 2013-03-05 14:28:30
可能的重複:http://stackoverflow.com/questions/1942644/get-generic-type-of-java-util-list – 2013-03-05 14:32:07