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创新实验室罗文