Java学习--day6

来源:互联网 发布:步步高i270软件下载 编辑:程序博客网 时间:2024/05/29 16:37
泛型
1、泛型
即“参数化类型”。泛型可以解决数据类型安全性的问题,其主要原理实在类声明时通过一个标识表示类中某个属性的类型或者某个方法的返回值及参数类型。这样在类声明或实例化时只要指定好需要的具体类型即可。
加入泛型的最大好处就是避免了类转换异常(ClassCastException)的发生,这样会使程序更加安全。
例:
class Point<T>{
private T var;
public T getVar(){
return var;
}
public void setVar(T var){
this.var=var;
}
}
public class Demo05{
public static void main(String args[]){
Point<integer> p = new Point<integer>(); //在申明类对象时如果不指定泛型的数据类型,那么会出现警告。但不影响程序的运行,统一使用object接收。
p.setVar(30);
System.out.println(p.getVar()*2);
}
}
设置的内容必须与泛型所指定的类型一致。
泛型的指定中无法指定基本数据类型,必须设置成一个类,因此在设置数字的时候要用到包装类。

2、通配符
public static void fun(Info<?> temp){
System.out.println(temp);
}
泛型类的引用传递,Java引入通配符"?",表示可以接收此类型的任意泛型对象。
但用?接收泛型对象时,则不能设置被泛型指定的内容。可以设置为Null。
3、受限泛型
可以设置泛型的上下限。上线用extends声明,下限用super申明。
上限:
声明对象 类名称<? extends 类> 对象名称
定义类: [访问权限] 类名称<泛型标识 extends 类>{}
(也可以在类声明处指定泛型的上限:class Info<T extends Number>,这样泛型的范围就是是所有数字)
下限:
声明对象 类名称<? super 类> 对象名称
定义类: [访问权限] 类名称<泛型标识 extends 类>{}
限制:在泛型操作中,子类的泛型类型是无法是使用父类的泛型类型接收的。如Info<String>不能使用Info<Object>接收
4、泛型接口
泛型接口在Java类库中大量是使用,因为这样可以防止安全警告信息的出现。
[访问权限] interface 接口名称<泛型标识>{}
interface Info<T>{...}
classs InfoImpl<T> implements Info<T>{...}
public class Demo06{
public static void main(String args[]){
//第一种
Info<String> i =null;
i=new InfoImpl<String>("hello");
.....
//第二种
Info<String> i =null;
i=new InfoImpl("hello");
.....
//实例化子类对象的时候不用再指定泛型,因为声明子类的时候已经指定了
}
}
5、泛型方法
[访问权限] <泛型标识> 泛型标识(返回类型或者void) 方法名称([泛型标识 参数名称])
例 public <T> T fun(T t){return t;}
泛型统一参数类型
public static <T> void add(Info<T> i1,Info<T> i2){
.......
}

返回泛型对象
public static <T> Info<T> fun(T p){
Info<T> temp = new Info<T>();
temp.setVar(p);
return temp;
}
....
Info<Integer> i = fun(30);
...

返回泛型数组
public static <T> T[] fun1(T arg){
return arg;
}
.....
Integer i[] = fun1(1,2,3,4,5);
.....


0 0
原创粉丝点击