2010-02-10 24 views
13

我使用反射來構造一個類(ConfigBuilder)接受一個文件作爲參數:的java:未選中調用getConstructor(java.lang.Class中<?> ...)

Class myClassType = Class.forName(className); 
Class[] types = new Class[] { File.class }; 
Constructor cons = myClassType.getConstructor(types); 
Object[] constructorArgs = new Object[] { myFile }; 
cb = (ConfigBuilder) cons.newInstance(constructorArgs); 

,但我得到這樣的警告:

warning: [unchecked] unchecked call to getConstructor(java.lang.Class<?>...) as a member of the raw type java.lang.Class 
Constructor cons = myClassType.getConstructor(types); 

顯然,似乎getConstructor需要一個泛型類型,所以我想是這樣:

Class<?>[] types = new Class<?>[] { File.class }; 

但我得到相同的警告信息

有什麼想法嗎?

大衛

回答

16

警告實際上是指myClassType。你需要參數化它(和cons)。

Class<?> myClassType = Class.forName(className); 
Class<?>[] types = new Class[] { File.class }; 
Constructor<?> cons = myClassType.getConstructor(types); 
+0

這個偉大的工程,也只是補充說,你可以使用'類 myClassType = SpecificClass.class;'在我的情況。 – Ashitakalax 2014-05-16 19:57:35

6

首先這只是警告,與反射和那些在編譯時未知類型的工作時,應該不會造成您不必要的報警。泛型的優點是更強大的編譯時類型檢查和一旦您撥打Class.forName(className)就會跳出窗口。

但是,如果你像大多數人(包括我)一樣,那麼你可能想擺脫這種警告,以免它不會不必要地引起你的注意。要做到這一點,你可以參數構造函數變量cons

Class<?> myClassType = Class.forName(className); 
Class<?>[] types = new Class[] { File.class }; 
Constructor<?> cons = myClassType.getConstructor(types); 
相關問題