泛型

泛型类

// 简单泛型
class Point<T>{         // 此处可以随便写标识符号,T是type的简称  
    private T var ;     
    public T getVar(){  
        return var ;  
    }  
    public void setVar(T var){  
        this.var = var ;  
    }  
} 

多元泛型

public class User<K, V> {
    private K id;
    private V name;

    public K getKey() {
        return id;
    }

    public void setKey(K id) {
        this.id = id;
    }

    public V getValue() {
        return name;
    }

    public void setValue(V name) {
        this.name = name;
    }

    public User(K id, V name) {
        this.id = id;
        this.name = name;
    }

    public static void main(String[] args) {
        User<Long, String> user = new User<>(123L, "张三");
        System.out.println(user.getKey());
        System.out.println(user.getValue());
    }
}

泛型接口

// 泛型接口,带一个抽象方法
interface Info<T>{       
    public T getVar() ;
}  
// 泛型接口实现类
class InfoImpl<T> implements Info<T>{ 
    private T var ;        
    public InfoImpl(T var){    
        this.setVar(var) ;    
    }  
    public void setVar(T var){  
        this.var = var ;  
    }  
    public T getVar(){  
        return this.var ;  
    }  
} 
public class GenericsDemo24{  
    public static void main(String arsg[]){  
        Info<String> i = new InfoImpl<String>("汤姆") ; 
        System.out.println("内容:" + i.getVar()) ;  
    }  
}  

泛型方法

// 参数类型是 Number 子类
private static <T extends Number> double add(T a, T b) {
    return a.doubleValue() + b.doubleValue();
}

// 带泛型的字节码对象作为参数
private static <T> T test(String s, Class<T> t) {
    return JSONObject.parseObject(string, t);
}

public static void main(String[] args) {
    add(1, 2);
    User user = test("{\"name\":\"Marry\",\"age\":18}", User.class);
}

泛型上下限

// 指定上限:只能是 Number 或其子类
static class Info<T extends Number>{    
}

// 指定下限(只能用在方法上):必须是 Integer 或其父类
public static void test(Info<? super Integer> info){
}
posted @ 2023-03-01 17:15  CyrusHuang  阅读(44)  评论(0)    收藏  举报