java 泛型深入_Java 深入泛型

在深入了解泛型之前我们先来回忆一下向上转型和向下转型,结合以下代码来看:

public class TestF{

private Object b;

public Object getB(){

return b;

}

public void setB(Object b){

this.b=b;

}

public static void main(String[] args){

TestF t=new TestF();

//向上转型

t.setB(new Boolean(true));

//向下转型:getB()方法返回的是Object类型的,却以Boolean类型返回;

System.out.println(t.getB());

t.setB(new Float(12.4));

Float f=(Float)(t.getB());

System.out.println(f);

}

}

编译运行后输出:

true

12.4

在上述代码中,TestF类定义了私有的成员变量b,类型为Object类,同时为其定义了getB()和setB()方法。在主方法中,将new Boolean(true)对象作为setB()方法的参数,由于setB()方法的参数类型为Object类型,而new Boolean(true)对象为Boolean类型,因此就实现了向上转型操作。同时在调用getB()方法时,将getB()方法返回的Object对象以相应的Boolean类型返回,因此实现了向下转型操作。向上转型是安全的,但是向下转型如果用错了类型,或没有执行该操作,通常会报异常,如下将上面的代码修改一下:

public class TestF{

private Object b;

public Object getB(){

return b;

}

public void setB(Object b){

this.b=b;

}

public static void main(String[] args){

TestF t=new TestF();

//向上转型

t.setB(new Boolean(true));

//向下转型:getB()方法返回的是Object类型的,却以Boolean类型返回;

System.out.println(t.getB());

t.setB(new Float(12.4));

Integer f=(Integer)(t.getB());

System.out.println(f);

}

}

编译运行后输出:

true

Exception in thread "main" java.lang.ClassCastException: java.lang.Float cannot be cast to java.lang.Integer

at TestF.main(TestF.java:16)

Object类为最上层的父类,很多程序员为了使程序更为通用,通常程序传入的值与返回的值都为Object类型,但在需要使用这些实例时,必须正确地将该实例转换为原来的类型,否则就会报ClassCastException异常。

接下来使用泛型对第一个代码进行修改,代码如下:

public class OverClass{

private T over;

public T get(){

return over;

}

public void set(T over){

this.over=over;

}

public static void main(String[] args){

OverClass over1=new OverClass();

OverClass over2=new OverClass();

over1.set(true);

System.out.println(over1.get());

over2.set(12.3f);

System.out.println(over2.get());

}

}

在上述代码中,定义OverClass类时,后面加了一个,这里便引用了泛型机制,OverClass便称为泛型类,同时返回和接受的参数使用T这个类型。最后在主方法中使用OverClass形式返回一个Boolean类型的对象,使用OverClass形式返回一个Float类型的对象,不需要进行向上转型和向下转型操作。

今天的内容就讲到这里,觉得有用的话,欢迎分享给更多的人!

68bfdf3476ef0c6acd06a67b23f67ce1.gif

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值