j2se-----泛型

ArrayList<E>  这个E是什么?

这个E是在定义的时候用的,称为类型变量或类型参数

ArrayList<String>称作参数化类型
ArrayList<String>中的String称作类型参数的实例或者叫实际类型参数
这里的<>读做 typeof


printMethod(List<?> list);//这里是什么意思
意思是:这个集合是一个任意定义了泛型的结合...?是通配符,匹配任意的一种泛型
但是如果我这样写可以吗?
printMethod(List<?> list){   //这种事通配符方案
   list.add(1);
   list.size();
}

<T> void  printMethod(List<T> list,T o){   //这种是泛型方法
   list.add(o);  //这个可以用了
   list.size();
}

注意,上面是编译不会通过的,因为根本就不知道list到底是那种泛型,所以编译器是不会让你在这个list里面乱加东西的,但是list.size()可以用,因为这个方法与类型无关

List<? extends Number>  这是限定通配符,限定通配符的上边界。。。
List<? super Number>这是限定通配符的下边界,也就是?要超过Number,最低只能是Number


定义泛型:

public <T> void save(T bean){
				
}  //注意前面的<T>是对某种特定类型的泛型的声明,所以前面尖括号里面可以写任意字符

写成下面是一样的
public <A> void save(A bean){}

1.编写一个方法,把Object类型转换为其他类型


public static <T> T convert(Object o){   //这种是泛型方法,不是通配符方案
    return (T)obj;
}

使用: 
Object o = "aaa"
 String x = convert(o);

注意这里类型转换时根据左边需要赋值给谁就转换成谁


2.定义一个方法,把任意参数类型的集合中的数据安全的复制到相应类型的数组中。

public <T> void copy(Collection<T> dest ,T src){//这里的T有传播性,由Collection<T> 确定
}

public <T> void copy(T dest ,T src){  //这两个T会取他们共同的父类
}

public <T> T copy(T dest ,T src){  //这两个T由返回值确定}


泛型类型。。。。。。使得方法有统一的泛型

public class GenericDao<E>{
      public void add(E x){
      }

      public E findById(int id){
      }

      public void delete(E o){}
    
      public void delete(int id){}

     public Set<E> findByConditions(String where){
          return null;
     }
}
注意:静态方法不能用泛型类型,但是可以用泛型方法

你可能感兴趣的:(bean,J2SE)