泛型

泛型的本质就是将类型参数化。在Java程序中,我们不仅可以将数据设置为参数,类型也是可以作为参数的。

例:泛型类

class GeneralType <Type> {
	Type object;
	public GeneralType(Type object) {
		this.object = object;
	}
	public Type getObj(){
		return object;
	}
}

在这里我们将generalType类声明为泛型类,Type,是个泛型参数,实际上是一个类型参数。不仅数据可以作为参数,类型也是可以作为参数的。也就是说我们实际使用这个GeneralType类的时候,是需要给出一个类型实参的,然后根据类型实参,能够确定这一次使用GeneralType类它里面的属性是什么类型的,它的方法处理的是什么类型的数据,方法的反馈是什么类型的。

测试

public class Test{
  public static void main(String args[]){
	GeneralType<Integer> i = new GeneralType<Integer> (2);
	GeneralType<Double> d = new GeneralType<Double> (0.33);	
	System.out.println("i.object=" + (Integer)i.getObj());
	System.out.println("i.object=" + (Integer)d.getObj());
	/*这一句会编译错误,d所指向的对象是用类型实参double来构造
	的GeneralType对象,所以它的getObj()返回的是一个double
	对象,如果硬要转换成Integer,是没法转换的,会出现编译错误。*/
	}
}

泛型方法

class GeneralMethod {
	<Type> void printClassName(Type object) {
	System.out.println(object.getClass().getName());
	}
}
public class Test {
  public static void main(String[] args) {
    GeneralMethod gm = new GeneralMethod();
    gm.printClassName("hello");
    gm.printClassName("3");
    gm.printClassName("3.0f");
    gm.printClassName("3.0");
    }
}

使用通配符

class GeneralType <Type> {
	Type object;
	public GeneralType(Type object) {
		this.object = object;
	}
	public Type getObj(){
		return object;
	}
}
class ShowType {
  public void show (GeneralType<?> o) {
  	System.out.println(o.getObj().getClass().getName());
  	}
}
public class Test {
  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);
  }
}

程序的运行结果如下:
java.lang.Integer
java.lang.String

有限制的泛型

在参数“Type”后面使用“extends”关键字并加上类名或接口名,表明参数所代表的类型必须是该类的子类或者实现了该接口。
注意:对于实现了某接口的有限制泛型,也是使用extends关键字,而不是implements关键字。

class GeneralType <Type extends Number> {
	Type object;
	public GeneralType(Type object) {
		this.object = object;
	}
	public Type getObj(){
		return object;
	}
}
public class Test {
  public static void main(String[] args) {
    GeneralType<Integer> i = new GeneralType<Integer> (2);
    //GeneralType<String> s = new GeneralType<String> ("hello");
    //非法,T只能是Number或Number的子类

ps:笔记根据郑莉教授Java语言程序设计视频整理

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值