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、枚举 

 

posted @ 2014-09-17 09:40  郑州peak  阅读(127)  评论(0编辑  收藏  举报