T和Class< T >以及Class< ? >的理解
方法定義:
public <T> T creatNew(T bean) {
return apiServer;
}
public <T> T creatNew1(Class<T> bean) throws IllegalAccessException, InstantiationException {
return apiServer.newInstance();
}
public <T> T creatNew2(Class<?> bean) throws IllegalAccessException, InstantiationException {
return (T) apiServer.newInstance();
}
public Object creatNew3(Class<?> apiServer) throws IllegalAccessException, InstantiationException {
return apiServer.newInstance();
}
調用方式:
int aNew = creatNew(10);
try {
String bNew = creatNew1("".getClass());
boolean cNew = creatNew2("".getClass());
int dNew = creatNew2("".getClass());
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (InstantiationException e) {
e.printStackTrace();
}
creatNew和creatNew1比較
相同點:兩個方法的返回值類型與傳入參數類型已知
不同點:參數類型不同,一個是具體類型,一個是Class類- creatNew1和creatNew2比較
相同點:方法參數類型一致都是Class類型
不同點:creatNew2返回值類型與參數類型可以不一樣 - creatNew2和creatNew3比較
這兩個方法是等價的
結論
- 單獨的T代表一個類型而Class< T >和Class< ? >代表這個類型所對應的Class類
- Class< T >在實例化的時候,T要替換成具體類
- Class< ? >它是個通配泛型,?可以代表任何類型
PS:T是代表任意一種類型,這是泛型裏的問題,是一種形式,表示你用的是泛型編程,不受類型的約束