泛型,就是将类型参数化,设置为参数,产生泛型的类,泛型的方法及泛型的方法
泛型类
package 第三章类的重用;
public class 泛型 {
//泛型的类,参数是类型Type,接收传过来的类型参数
// 使用GeneralType类的时候,需要给出类型实参
// 从而确定类里面的属性是什么类型的,方法处理的是什么类型的数据,方法的返回值什么类型
static class GeneralType <Type>{
Type object;
// 这是构造函数,用参数来初始化实例对象,this指的是实例对象
public GeneralType(Type object){
this.object = object;
}
// 返回对象的属性值
public Type getObj(){
return object;
}
}
public static void main(String[] args) {
//创建GeneralType类的对象时候要传入类型,引用类型Integer或者基本数据类型Double
GeneralType<Integer> i = new GeneralType<Integer>(2);
// 都是通过GeneralType创建的对象,但类型不同
GeneralType<Double> d = new GeneralType<Double>(0.33);
System.out.println("i.object=" + (Integer)i.getObj());
// 实例对象d是Double类型,不能转换成Integer类型,所以编译错误
// System.out.println("d.object=" + (Integer)d.getObj());编译错误
}
}
使用通配符
package 第三章类的重用;
public class 使用通配符 {
static class GeneralType <Type>{
Type object;
// 这是构造函数,用参数来初始化实例对象,this指的是实例对象
public GeneralType(Type object){
this.object = object;
}
// 返回对象的属性值
public Type getObj(){
return object;
}
}
static class ShowType{
// 实参是用GeneralType所给的不同类型的实参构造的对象
public void show(GeneralType<?> o){
System.out.println(o.getObj().getClass().getName());
}
}
public static void main(String[] args) {
ShowType st = new ShowType();
GeneralType<Integer> i = new GeneralType<Integer>(2);
GeneralType<String> s = new GeneralType<String>("Hello");
st.show(i);
st.show(s);
}
}
有限制的泛型
- 在参数“Type”后面使用“extends”关键字并加上类名或接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口(对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implement关键字)
package 第三章类的重用;
public class 有限制的泛型 {
static class GeneralType <Type extends Number>{
Type object;
// 这是构造函数,用参数来初始化实例对象,this指的是实例对象
public GeneralType(Type object){
this.object = object;
}
// 返回对象的属性值
public Type getObj(){
return object;
}
}
public static void main(String[] args) {
GeneralType<Integer> i = new GeneralType<Integer>(2);
// 非法!只能是Number或Number的子类
// GeneralType<String> s = new GeneralType<String>("Hello");
}
}
发表评论