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());   

 

 

 

 

 

 

 

 

 

 

 

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