java中generic实例详解

时间:2022-11-25 16:46:57

一介绍:

在JavaSE1.5之前,没有泛型的情况的下,通过对类型Object的引用来实现参数的“任意化”,“任意化”带来的缺点是要做显式的强制类型转换,而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况,编译器可能不提示错误,在运行的时候才出现异常,这是一个安全隐患。

泛型的好处是在编译的时候检查类型安全,并且所有的强制转换都是自动和隐式的,提高代码的重用率。

二、泛型参数:

java" id="highlighter_174066">
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
class Gen<T> {
    private T ob;
    //定义泛型成员变量
    public Gen(T ob) {
        this.ob = ob;
    }
    public T getOb() {
        return ob;
    }
    public void setOb(T ob) {
        this.ob = ob;
    }
    public void showType() {
        System.out.println("T的实际类型是: " + ob.getClass().getName());
    }
}
public class GenericParameter {
    public static void main(String[] args){
        //定义泛型类Gen的一个Integer版本
        Gen<Integer> intOb=new Gen<Integer>(100);
        intOb.showType();
        int i= intOb.getOb();
        System.out.println("value= " + i);
        System.out.println("----------------------------------");
        //定义泛型类Gen的一个String版本
        Gen<String> strOb=new Gen<String>("Hello Dylan!");
        strOb.showType();
        String s=strOb.getOb();
        System.out.println("value= " + s);
    }
}

output:

T的实际类型是: java.lang.Integer
value= 100
----------------------------------
T的实际类型是: java.lang.String
value= Hello Dylan!

三、泛型类:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
class GenericsFoo<T> {
    private T x;
    public GenericsFoo(T x) {
        this.x = x;
    }
    public T getX() {
        return x;
    }
    public void setX(T x) {
        this.x = x;
    }
}
public class GenericClass {
    public static void main(String args[]){
        GenericsFoo<String> strFoo=new GenericsFoo<String>("Hello Generics!");
        GenericsFoo<double> douFoo=new GenericsFoo<double>(new double("33"));
        GenericsFoo<Object> objFoo=new GenericsFoo<Object>(new Object());
        System.out.println("strFoo.getX="+strFoo.getX());
        System.out.println("douFoo.getX="+douFoo.getX());
        System.out.println("objFoo.getX="+objFoo.getX());
    }
}

output:

strFoo.getX=Hello Generics!
douFoo.getX=33.0
objFoo.getX=java.lang.Object@1d0fafc

四 限制泛型:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
import java.util.ArrayList;
import java.util.Collection;
class CollectionGenFoo<T extends Collection> {
    private T x;
    public CollectionGenFoo(T x) {
        this.x = x;
    }
    public T getX() {
        return x;
    }
    public void setX(T x) {
        this.x = x;
    }
}
public class GenericRestrict {
    public static void main(String[] args) {
        CollectionGenFoo<ArrayList> listFoo = null;
        listFoo = new CollectionGenFoo<ArrayList>(new ArrayList());
        CollectionGenFoo<? extends Collection> listFoo1 = null;
        listFoo1=new CollectionGenFoo<ArrayList>(new ArrayList());
        System.out.println("实例化成功!");
    }
}

output:
实例化成功!

五 泛型方法:

?
1
2
3
4
5
6
7
8
9
10
11
12
public class GenericFunction {
    public <T> void f(T x) {
        System.out.println(x.getClass().getName());
    }
    public static void main(String[] args) {
        GenericFunction ea = new GenericFunction();
        ea.f(" ");
        ea.f(10);
        ea.f('a');
        ea.f(ea);
    }
}

output:
java.lang.String
java.lang.Integer
java.lang.Character
GenericFunction

-----------------------------
dylan presents.

总结

以上就是本文关于java中generic实例详解的全部内容,希望对大家有所帮助。如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

原文链接:http://blog.csdn.net/indexman/article/details/17485361