Java之繼承一個泛型類

泛型繼承的原則

繼承泛型類時,必須對父類中的類型參數進行初始化。

 

步驟:
1、定義一個泛型類Parent<T>   注意:定義:泛型T,使用:實際類型
2、子類繼承調用。Son類定義時有兩種方式初始化父類型的類型參數:

  • 法1:用子類中的泛型類型初始化父類:
    public class Son<T> extends Parent<T>{}
     
  • 法2:用具體類型初始化:
    public class Son extends Parent<String>{}
     

方法1比較常見,對方法2用法的理解,可以參考以下代碼:


使用HomeFragment時,調用new HomeFragment即可,因爲HomeFragment繼承了BaseListFragment<HomeViewModel> 時已經用具體類型 HomeViewModel 初始化了 BaseListFragment<T extends AbsViewModel> 中的T.

 

定義BaseListFragment代碼如下,可以看到尖括號內用了<T>


 

 


關於ArrayList<E>的理解

E — Element
以下代碼:
ArrayList<String> = new ArrayList<String>();
ArrayList<Integer> = new ArrayList<Integer>();



MutableLiveData<String> loadState = new MutableLiveData<>(); ----LiveData框架類

protected void postState(String state) {
    if (loadState != null) {
        loadState.postValue(state);
    }
}

可以參考下面示例理解:

//定義  
class Point<T> {// 此處可以隨便寫標識符號   
    private T x ;        
    private T y ;        
    public void setX(T x) {//作爲參數  
        this.x = x ;  
    }  
    public void setY(T y) {  
        this.y = y ;  
    }  
    public T getX() {//作爲返回值  
        return this.x ;  
    }  
    public T getY() {  
        return this.y ;  
    }  
};  


//IntegerPoint使用  
Point<Integer> p = new Point<Integer>() ;   
p.setX(new Integer(100)) ;   
System.out.println(p.getX());    

  
//FloatPoint使用  
Point<Float> p = new Point<Float>() ;   
p.setX(new Float(100.12f)) ;   
System.out.println(p.getX());   

 

 

 

 

 

 

 

 

 

 

 

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