泛型

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比較
    這兩個方法是等價的

結論

  1. 單獨的T代表一個類型而Class< T >和Class< ? >代表這個類型所對應的Class類
  2. Class< T >在實例化的時候,T要替換成具體類
  3. Class< ? >它是個通配泛型,?可以代表任何類型

PS:T是代表任意一種類型,這是泛型裏的問題,是一種形式,表示你用的是泛型編程,不受類型的約束

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章