泛型

来源:互联网 发布:淘宝上旺旺点不开 编辑:程序博客网 时间:2024/06/10 09:35
----概念:
广泛的类型。(当不知道类型定义为什么的时候,就是用泛型。谁用谁知道)


----作用:
避免了类型转型的异常


注:
1:在泛型中不能使用基础数据类型(如int只能用Integer)


2:其实泛型玩的就是引用数据类型(引用数据类型其实就是对象,封装了将基础数据类型转换为引用数据类型的方法)


3:在声明时指定泛型的类型,如果没指定就会在编译时出现警告,但仍然可以执行,应为没指定类型的就都是Object类型
eg:
Person<String,Integer>p = new Person<String,Integer>();//已经声明了的
Person p = new Person(); //并未声明的


4:在泛型中不能用父类来接受子类
eg:
public class GenericsDemo{
  public static void main(String args[]){
   Info<String> i1 = new Info<String>(); //子类
   Info<Onject> i2 = null; //父类
   i2 = i1; 
  }
} //编译会报错


----泛型通配符:(一般用在参数传递时)


public void fun(Person<?,?>p){ //?为通配符(相当于int a这样好理解一些)
}


受限泛型:
extends:
public void fun(Person<? extends Number>p)
?就只能是Number的子类或Number(相当于?<=Number)


super:
public void fun(Person<? super Number>p)
?就只能是Number的子类或Number(相当于?>=Number)


----泛型接口:
定义:
interface Info<T>{
  public T getVar();
}


泛型实现的两种方式:
1:
在子类实例化时指定类型
eg:
class InfoImpl<T> implements Info<T>{
  在这里面指定类型
}


2:在接口被继承时,直接指定类型
eg:
class InfoImpl implements Info<String>


----泛型方法
定义:
class GenerricsFun{
  public <T> T test(T t){  //<T>表示声明后面的泛型,T表示返回的数据类型
return t;
  }
}


注:静态方法不能访问类上定义的泛型


----泛型数组
定义:
1:作为参数传递
public <T> void test(T a[]){
  for(int i=0;i<a.length;i++){
   System.out.println(a[i]);
  }
}


2:返回值为数组
public <T> T[] testReturn(T a[]){
   return a;
}


----泛型的嵌套
eg:
class PersonDemo<T,V>
class Theach<P>


Theach<PersonDemo>th = new Theach<PersonDemo>(new PersonDemo<String,Integer>("好人",2));





























0 0
原创粉丝点击