java基础知识4
1、泛型
(1)泛型的好处:
1、把原来程序运行时可能发生的问题,转变为编译时的问题。
2、提高程序的安全型。
(2)泛型的擦除机制
让编译器在源代码级别上,即挡住向集合中插入非法数据。但编译器编译完带有泛型的
的Java程序后,生成的class文件中将不再带有泛型信息。简单的说:泛型只在编译阶段有效
运行阶段无效。
(3) 泛型的应用
1、在类上声明泛型
class 类名<T> {}
类上声明的泛型可以应用在什么位置?
泛型可以应用于实例属性、和实例方法上。
类的成员:成员属性 成员方法
成员属性:实例属性 类属性
成员方法:实例方法 类方法
类上声明的泛型为什么不能应用在类属性,类方法上呢,因为类属性,类方法可以直接通过类名调用,这时泛型还没有具体类型。类名.属性 类名.方法。
泛型如果应用在方法上可以应用于参数和返回值上。
public class Genec<T>{
T t;
public T fun( T t1){
}
}
2、在方法上声明泛型
声明泛型与使用泛型的区别?
声明泛型:<>当括号
应用泛型:不带括号
怎样在方法上声明泛型?
》泛型必须声明在返回值之前。
public <T> void fun1(T t2){
}
在方法上声明泛型,怎样使用?
方法上的泛型只能在方法上使用。可以在方法的参数上以及返回值上
//在这个方法上声明泛型
 public  static <T>  T  show(T t){
  T m;
  return null;
 }
3、泛型的通配符为?
主要有两个应用:
(1) ? extends E
在Collection接口中声明
boolean addAll(Collection<? extends E>);
本类以及所有子类型
 public void fun1(){
  List<Integer> list1 = new ArrayList<Integer>();
  list1.add(1);
  list1.add(2);
  list1.add(3);
  
  List<Double> list2 = new ArrayList<Double>();
  list2.add(1.0);
  list2.add(2.0);
  list2.add(3.0);
  
  List<String> list3 = new ArrayList<String>();
  list3.add("a");
  list3.add("b");
  list3.add("c");
  
  List<Object> list = new ArrayList<Object>();
  
  list.addAll(list1);  //addAll(Collection<? extends E> c) 
  list.addAll(list2);
  list.addAll(list3);
  System.out.println(list); 
 }
(2) ? super E
本类以及父类.
TreeSet(Comparator<? super E> comparator)
TreeSet集合中的元素要求必须有自然顺序(Comparable接口) 如果没有自然顺序,就需要人为指定比较器(Comparator接口)
2、枚举
 
                    
                     
                    
                 
                    
                
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号