Java泛型-类型参数化
解决支持多类型参数的方案:
1, 重载: 在同一个类中,方法名相同,参数不同
不足之处: 代码过于重复
public class Tool{
    public String arrToStr(String[] arr, String symbol){
        String str = "";
        for(String v: arr){
            str += symbol + v;
        }
        return str.substring(symbol.length());
    }
    public String arrToStr(int[] arr, String symbol){
        String str = "";
        for(int v: arr){
            str += symbol + v;
        }
        return str.substring(symbol.length());
    }
    public String arrToStr(double[] arr, String symbol){
        String str = "";
        for(double v: arr){
            str += symbol + v;
        }
        return str.substring(symbol.length());
    }
}
2, 使用Object
好处: 简单
不足: 什么都支持(类型无法得到限制)
public class Tool{
    public String arrToStr(Object[] arr, String symbol){
        String str = "";
        for(Object v: arr){
            str += symbol + v;
        }
        return str.substring(symbol.length());
    }
}
3, 泛型: 广泛的类型(默认为任意类型)
但是泛型可以设置上限(以继承的方式实现)
3.1 定义方法泛型
public class Tool{
    //<X>: 程序员定义的一种数据类型即泛型,泛型名: X
    //X  : 默认为Object
    public <X> String arrToStr(X[] arr, String symbol){
        String str = "";
        for(X v: arr){
            str += symbol + v;
        }
        return str.substring(symbol.length());
    }
    
    //设置上限为Number
     public static <X extends Number> String arrToStr(X[] arr, String symbol){
        String str = "";
        for(X v: arr){
            str += symbol + v;
        }
        return str.substring(symbol.length());
    }
}
public class Datas <X>{
    private X x;
    public Datas(X x){
        this.x = x;
    }
    public X getX(){
        return x;
    }
    public void setX(X x){
        this.x = x;
    }
    public static void main(String[] args) {
        Datas datas = new Datas(50);
        //不声明: X为Object
        Datas datas1 = new Datas("哈哈");
        Datas<Car> datas2 = new Datas<>(new Car("吉利",30));
        //声明 X为 Car类型
        Datas<Integer> datas3 = new Datas<>(50);
    }
}
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号