对Class使用泛型语法的一些问题

关于think in java上的

An interesting thing happens when you use the generic syntax for Class objects: newlnstance( ) will return the exact type of the object, rather than just a basic Object as you saw in ToyTest.java. This is somewhat limited

class Toy{
    private String name;
    Toy(){}
    Toy(int i){}
}
class FancyToy extends Toy{
    FancyToy(){
        super(1);
    }
}
public class GenericToyTest{
    public static void main(String...args) throws Exception{
        Class<FancyToy> ftClass = FancyToy.class;
        FancyToy fancyToy = ftClass.newInstance();
        Class<? super FancyToy> up = ftClass.getSuperclass();
              // Object.class;
        //!Error
        //!Class<Toy> up2 = ftClass.getSuperclass();
        //!Toy t = up.newInstance();
        System.out.println(up.getName());
        Object obj = up.newInstance();
    }
}

输出结果为 com.company.Toy

  1. Class<? super FancyToy> up;与Class<Toy> up不是一样的(以后再研究区别)
  2. Toy t = up.newInstance();//Error
    up接受的为:FancyToy的超类
    up可以接受Toy.class和Object.class
    up.newInstance();自然可能返回Object的实例化或Toy的实例化,是很模糊的。

以后应该会有更深刻的理解
(未完待续)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值