java泛型了解一下

361 阅读2分钟

hello大家好,我是冰冰。

Java泛型这个特性是从JDK 1.5才开始加入的,因此为了兼容之前的版本,Java泛型的实现采取了“伪泛型”的策略, 即Java在语法上支持泛型,但是在编译阶段会进行所谓的“类型擦除”(Type Erasure), 将所有的泛型表示(尖括号中的内容)都替换为具体的类型(其对应的原生态类型),就像完全没有泛型一样。

所以Java泛型只在编译期间有效,运行期间泛型是没有意义的.

List Map<K,V> E K V T A-Z 都是代表参数化数据类型

下面用代码展示用法

泛型类

public class MyFanXingClass<S extends Number, T> {
    //属性和方法
    private Integer id;
    private S s;//实例变量  对象  Object
    private T t;
    private Object data;

    public void a(T t1) { //普通的功能方法  t1的类型 与 T 类型一致

    }
    //创建泛型方法  b
    public <K,S,T,M,N> void b(K k,S s1,T t) {

    }

    //K S与创建对象的时候类型不一致   没有一点关系  在正常开发中 将泛型方法定义成static
    public static <K,S> void b1(K k,S s1) {

    }

    //参数化类型  上限  和 下限
    //上限: extends  MyFanXingClass<S extends Number, T>  限定了S只能是Number类型或者Number类型所有的子类
    //下限: super    MyFanXingClass<S, ? super  T> my   ?  限定了?只能T类型 或者 T 类型父级类型

    public  void c(MyFanXingClass<S, ? super  T> my, List<? super LinkedHashMap> list){

    }

泛型接口

//很多模块都有CURD  CREATE UPDATE READ  DELETE
public interface BaseDao<T, S> {
    //抽象出来很多模块通用的方法
    void add(T t);

    void delete(S id);

    void update(T t);

    List<T> selectAll();

    T selectOne(S id);
}
public abstract class BaseDaoImpl<T, S> implements BaseDao<T, S> {
    @Override
    public void add(T t) {
        System.out.println("add .... success " + t);
    }
//........
}
public interface UserDao extends BaseDao<User,Integer> {//继承父接口  可以使用多态创建对象
    //体现具体模块里面特有功能方法
}
public class UserDaoImpl extends BaseDaoImpl<User,Integer> implements UserDao {
}

文章创作灵感来自:1024创新实验室罗文