java基础——泛型解析

来源:互联网 发布:熊猫安全软件 编辑:程序博客网 时间:2024/05/16 11:07

泛型,编写的代码可以被很多不同类型的对象重用。简单泛型类的定义:

public class Generic<T> {public Generic(){this.info = null;}public Generic(T info){this.info = info;}public void setInfo(T info){this.info = info;}public T getInfo(){return this.info;}private T info;}

用具体的类型替换类型变量(T)就可以实例化泛型类型:

为了更好的呈现泛型的原型首先新建一个student类:

public class Student {public Student(){this.name = null;this.tall = 0;}public Student(String name,int tall){this.name = name;this.tall = tall;}public int getTall(){return this.tall;}public String getName(){return this.name;}public void getDescription(){System.out.println("学生:"+this.getName()+"\n身高:"+this.getTall()+"cm");}private String name;private int tall;}

主类:

public class test {      public static void main(String[] args){         /**************使用自定义泛型类*******************/    Student s = new Student("小卓",165);        Generic<Student> info = new Generic<Student>(s);        s.getDescription();    }}

结果:

学生:小卓身高:165cm

注:也可以在普通类型中定义泛型方法

我们还可以对类型变量(T)进行限定,例如使T必须继承Comparable接口,这样才能对其数组进行排序:

public class Generic<T extends Comparable> {      ... ...}

当你定义了例子中的Generic泛型类后,你可以使用:

public class test {      public static void main(String[] args){         /**************使用自定义泛型类的原型*******************/    Student s = new Student("小卓",165);    Generic info_raw = new Generic(s);        Object ob = info_raw.getInfo();        Student student = (Student)ob;        student.getDescription();    }}

结果如上

这里没有使用<>传入对象类型,实例化时将结果进行了类型转换。泛型类的原型即将泛型中的T替换为了Object。

所有的类型查询只产生原始类型(以上面的s为例):

if(s instanceof Generic<Student>) //it's true

if(s instanceof Generic<String>) //it's also true

他们都是Generic类型

getClass方法总是返回原始类型:

Generic<Student> student = new Generic(....)

Generic<String> string= new Generic(....)

if(student .getClass() == string.getClass())  //true

使用泛型时需要注意:

1、不能抛出也不能捕泛型类实例

2、参数化类型的数组不合法

3、不能实例化类型变量

0 0
原创粉丝点击