您的位置:首页 > 编程语言 > Java开发

【泛型】泛型简介和泛型类

2016-12-10 20:54 148 查看

1. 泛型简介

在泛型引入之前,如果我们需要产生多个对象,每个对象的逻辑完全一样,只是对象内的成员变量的类型不同,那么我们只能创建多个类文件,给每个类的成员变量设置不同的数据类型。这么做会导致类的膨胀,重用性太差。

一种方式是对将Object作为变量类型,但是需要对获取的数据进行强制类型转换,这个过程可能导致类型转换异常。

另一种方式,泛型是解决上述问题的有效方法。

泛型是JDK 1.5 引入的新特性

反省可以在翻译的时候检查类型安全,并且所有的强制转换都是自动和隐式的

泛型的原理就是“类型参数化”,把所要操作的数据类型看做参数,就像方法的形参是运行时传递的值的占位符一样

反省可以提高代码的扩展性和重用性

泛型即通过参数化类型来实现在同一份代码上操作多种数据类型,泛型编程是一种编程范式,它利用“参数化类型”将类型抽象化,从而实现更为灵活的复用。

2. 泛型类

泛型类:

//一般用T、K、V代表泛型
class GenClass<T>{
private T obj;
public GenClass(T){
this.obj=obj;
}
public T getObj(){
return obj;
}
public void setObj(T obj){
this.obj=obj;
}
}


泛型实例化:

public static viod main(String [] args){
GenClass<Integer> intGenClass1=new GenClass<Integer>(120);
System.out.println(intGenClass1.getObj);
GenClass<String> intGenClass2=new GenClass<String>("Name");
System.out.println(intGenClass2.getObj);
...
}


泛型类的常规用法:

- 泛型的类型参数可以使泛型类

GenClass<GenClass<Student>> genOuter=new GenClass<GenClass<Student>>();
GenClass<Student> genInnter=new GenClass<Student>();
genInnter.setData(new Student("xiaoming"));
genOuter.setData(genIntter);

System.out.println(genOuter.getData().getData().toString);


泛型类可以同时设置多个参数的类型

class GenClass2<K,V>{
private K data1;
pricate V data2;
public GenClass2(){
}
public GenClass2(K data1,V data2){
this.data1=data1;
this.data2=data2;
}
public K getData1(){
return data1;
}
public V getData2(){
return data2;
}
}


public static void main(String[] args){
GenClass2<String,Integer> gen=new GenClass2<String,Integer>("lilei",20);
System.out.println(gen.getData1()+"-"+gen.getData2());
}


泛型类可以继承泛型类

泛型类可以实现泛型接口

class SuperClass<T1>{
private T1 data1;
public SuperClass(T1 data1){
this data1=data1;
}
public T1 showData1(){
return T1 data1;
}
}

interface IInfo<T2>{
public void showData(T2 data);
}

class SubClass<T1,T2> extends SuperClass<T1> implements IInfo<T2>{
private T1 data1;
private T2 data2;
public SubClass(T1 data1,T2 data2){
super(data1);
this.data2=tada2;
}
//重写了父类的方法
public T1 showData1(){
return super.showData1();
}
//实现接口的showData方法
public T2 showData(T2 data){
return data;
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息