2016-01-19 85 views
3

我想動態地加載一個java類,然後在ObservableList<myLoadedClass>中添加用這個類創建的對象。Java如何將加載的類參數類型作爲通用參數傳遞?

Class<?> thisClass = Class.forName("Point", true, classLoader); 
Object iClass = thisClass.newInstance(); 
... 
ObservableList<thisClass> data = FXCollections.observableArrayList(); 

最後一行原因錯誤

找不到符號:類thisClass ...

謝謝您的幫助。

+1

'thisClass'是一個變量,而不是一個類型的變量。 –

+0

你仍然可以使用ObservableList SomeDude

回答

0

確定爲通配符但後來......

Class<?> thisClass = Class.forName("Point", true, classLoader); 
Object iClass = thisClass.newInstance(); 
... 
ObservableList<?> data = FXCollections.observableArrayList(); 
data.addAll(iClass); 

最後一行原因:找不到適用於addAll(Object)的方法。

任何想法?


五(或者多一點;-)分鐘後......

相反通配符,「對象」做的伎倆。受到This thread的啓發,他們解釋說:「所以未知類型的集合不是可以採用任何類型的集合,它只採用未知類型,而且因爲我們不知道該類型(它的未知),所以我們永遠無法添加一個值,因爲java中沒有類型是未知類型的子類。「

所以,現在,我的解決辦法是:

Class<?> thisClass = Class.forName("Point", true, classLoader); 
Object iClass = thisClass.newInstance(); 
... 
ObservableList<Object> data = FXCollections.observableArrayList(); 
data.addAll(iClass); 

// Sample Point class method 
Method getXMethod = thisClass.getDeclaredMethod("getX"); 

System.out.println(getXMethod.invoke(data.get(0))); 
3

你不知道是什麼類型thisClass在編譯時 - 這是什麼通配符:

ObservableList<?> data = FXCollections.observableArrayList(); 
+0

那麼'ObservableList >''? – Hiru

+1

@Hiru,如果你想存儲'類',那很好,而不是類的實例。然而,這個問題說:「在ObservableList中添加用這個類創建的對象」 –

+0

@Hiru我認爲我想要一個'List '而不是'List > – assylias