有关JAVA Generic的一个问题

   在用java 原型 的时候会有很多有意思的 问题,下面的代码红色部分很有意思。难以解释,同一个T类型的对象赋予两个不同类型的对象,我想这个T的类型是Object。

package tt;

interface Factory<T>{
    T create();
}

class ContainerBuilder{
    
    public <T> ContainerBuilder factory(Class<T> type){
        return this;
    }
    public <T> ContainerBuilder factory(Class<T> type,
            Factory<? extends T> factory) throws Exception {
        //System.out.println(type);

        T t = type.getConstructor(new Class[] { String.class }).newInstance(
                "String");
        
        
        if(t instanceof String)
        System.out.println("new Instance:" + t);


        t = factory.create();
        
        if(t instanceof Gtest)
        System.out.println(t);

        
        return this;
    }
}
class Gtest{
    
}

public class GenericTest {
    ContainerBuilder builder=new ContainerBuilder();
    public Object test() throws Exception{
        builder.factory(String.class);
        
        return builder.factory(String.class, new Factory(){
            public Gtest create(){
                return new Gtest();
            }
        });
    }
    
    public static void main(String[] args) throws Exception{
        GenericTest gt=new GenericTest();
        try{
        System.out.println(gt.test());
        }catch(Exception e)
        {
            e.printStackTrace();
        }
    }
}

RUN后的输出:

new Instance:String
tt.Gtest@1a46e30
tt.ContainerBuilder@3e25a5
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值