[英]How to call a constructor without warnings?
我從這里使用代碼:
public Object loadService() throws Exception {
ClassLoader parentClassLoader = ServiceReloader.class.getClassLoader();
ServiceReloader classLoader = new ServiceReloader(parentClassLoader);
Class aClass = classLoader.loadClass("pl.jcubic.Service");
Constructor<?> ctor = aClass.getConstructor(new Class[] { String.class });
return ctor.newInstance(new Object[] { cwd() });
}
(ServiceReloader是擴展ClassLoader的類,該類加載文件pl / jcubic / Serice.class)(我的Service類是兩個構造函數如何使用一個參數String和一個null的構造函數)。
當我調用該代碼時,我得到:
init.java:40: warning: [unchecked] unchecked call to getConstructor(Class<?>...) as a member of the raw type Class
Constructor<?> ctor = aClass.getConstructor(new Class[] { String.class });
^
where T is a type-variable:
T extends Object declared in class Class
1 warning
我對泛型不是很熟悉,因為當我學習Java時,它們並未包含在語言中。
我試圖放Class<?>[]
但是得到了同樣的警告。 有沒有辦法抑制這種警告?
要消除警告,請更改為
Class<?> aClass = classLoader.loadClass("pl.jcubic.Service");
要么
Constructor<?> ctor = ((Class<?>) aClass).getConstructor(new Class[] { String.class });
問題是getConstructor
的返回類型是Constructor<T>
,其中T
是Class
類的類型參數。 但是由於編譯器不知道aClass
的類型參數,它將發出警告。
getConstructor()
方法是通用的。 如果要使用無警告代碼,請添加type參數。 例如,以下行不會產生警告:
Constructor<String> c = String.class.getConstructor();
由於您的方法是通用的,因此在方法定義中添加類型參數:
public <T> T loadService() throws Exception {
............
Constructor<T> c = clazz.getConstructor(params);
T obj = c.newInstance(args);
return obj;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.