泛型
来源:互联网 发布:淘宝上旺旺点不开 编辑:程序博客网 时间: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));
广泛的类型。(当不知道类型定义为什么的时候,就是用泛型。谁用谁知道)
----作用:
避免了类型转型的异常
注:
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