package GeneicDemo;
public class GenericDemo {
/** 泛型测试
* @param args
*/
public static void main(String[] args) {
//创建一个泛型类对象:在类名后面用一对尖括号<>把要传递的数据类型参数包起来,然后创建对象
GenClass<String> gen1 = new GenClass<String> ("lucy");
System.out.println(gen1.getData());
//自动做强制类型转换,gen1.getData()返回的是一个String类型的字符串
//接下来再创建一个对象,结构一样,只是它的数据类型是整型,该怎么做?只需将String 改成Integer即可
GenClass<Integer> gen2 = new GenClass<Integer> (100);
System.out.println(gen2.getData()); //gen2.getData()返回一个int类型的数据
//通过上面2个创建对象的过程,可以看到,只创建了一个类,但是却能构建2个不同数据类型的对象,使用起来很方便
//验证:泛型的类型参数(也就是<T>)可以是泛型类
GenClass<GenClass<Student>> gen3 = new GenClass<GenClass<Student>>();
//GenClass<Student>作为了类型参数,先需要产生一个Student对象
GenClass<Student> gen4 = new GenClass<Student>();
gen4.setData(new Student("张三"));
gen3.setData(gen4);
System.out.println(gen3.getData().getData().toString());
//带有2个类型参数的泛型类的实例的创建
GenClass2<String,Integer> gen5 = new GenClass2<String,Integer>("jack",30);
System.out.println(gen5.getData1());
System.out.println(gen5.getData2());
}
}
//创建一个含有多个类型参数的泛型类,并对类的属性值设置不同的参数类型,如下:
class GenClass2 <T1,T2> {
private T1 data1;
private T2 data2;
public GenClass2(T1 data1,T2 data2) { //构造方法,接收2个参数
this.data1 = data1;
this.data2 = data2;
}
public T1 getData1() {
return data1; //为封装的属性添加访问方法,返回值类型是T1
}
public T2 getData2() {
return data2; //为封装的属性添加访问方法,返回值类型是T2
}
}
/*创建一个泛型类 ,(其实也就是个模板类)T可以认为是代表一个变量名,
用来接收这个类构造对象时传递过来的数据类型*/
/*当构造对象时,传进来的是整型,那么类中所有变量,方法处,都是整型,如果
* 传进来的是String类型,那么类中所有的变量和方法处,数据类型都是String类型
* (所有的T都变成String),这样,这个类就可以被重用。*/
class GenClass <T> {
private T data;
public GenClass() {
}
public GenClass(T data) {
this.data = data;
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
}
class Student {
private String name;
public Student(String name) {
this.name = name;
}
public String toString() {
return "我是" + name;
}
}