簡體   English   中英

java:對 getConstructor(java.lang.Class) 的未經檢查的調用<?> ...)

[英]java: unchecked call to getConstructor(java.lang.Class<?>...)

我正在使用反射來構造一個類(ConfigBuilder),該類將文件作為參數:

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 };

但我收到了同樣的警告信息

任何的想法 ?

大衛

警告實際上是指myClassType 您還需要對其(以及cons )進行參數化。

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

首先,這只是一個警告,在處理編譯時未知的反射和類型時,不應引起您的過度警告 泛型的優點是更強大的編譯時類型檢查,一旦您調用Class.forName(className)所有這些都會消失。

但是,如果您像大多數人(包括我)一樣,那么您可能希望擺脫警告,以免它繼續不必要地引起您的注意。 為此,您可以參數化構造函數變量cons

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM