java总结(之六)--泛型

泛型实现了参数化类型的概念,使代码可以应用于多种类型。希望类和方法具备更广泛的表达能力。通过解耦类或方法与所使用的类型之间的约束。泛型的主要是用来指定容器要持有什么类型的对象,而且由编译器来保证类型的正确性。与其使用Object,更倾向暂时不指定类型使用类型参数,用尖括号括住。
java泛型的核心:告诉编译器想使用什么类型,然后编译器帮你处理细节。
java的泛型是使用擦除来实现的,但你在使用泛型时,任何具体的类型信息都被擦除了,你唯一知道的就是你在使用一个对象。所以List和List在运行时事实上是相同类型,他们都被擦除成原生List。
我们可以使用协助泛型类,的形式将泛型类型参数将擦除到它的第一个边界。
擦出的核心动机是它使得泛化的客户端可以用非泛化的类库来使用。擦除是的向着泛化的迁移成为可能。
擦出的代价是使得,泛型不能用于显式的引用运行时类型的操作之中,比如转型,instanceof,new表达式等。因为有关的参数的类型信息丢失了,所以它只是看起来好象拥有有关参数的类型信息而已。

泛型的常规用法

//泛型接口
interface MyInterface<T>{
    T next();
}
//泛型类
public class Test1<T> {
    private T a ;
    public Test1(T a){this.a = a;}
    public void set(T a){this.a = a;}
    public T get(){return a;}
    //泛型方法
    public <T> void f(T x){
        System.out.println(x.getClass().getName());
    }
    //可变参数与泛型方法
    public static <T> List<T> makeList(T ...args){
        List<T> list = new ArrayList<T>();
        for (T t : list) {
            list.add(t);
        }
        return list;
    }
    public static void main(String[] args) {
        Test1<String> test1 = new Test1<String>("nihao");
        String string = test1.get();
        test1.set("haha");
        String string2 = test1.get();
        System.out.println(string2 );

        //擦除所带来的影响
        Class class1 = new ArrayList<String>().getClass();
        Class class2 = new ArrayList<Integer>().getClass();
        System.out.println(class1 == class2);
    } 
}
output:
haha
true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值