Java泛型

Java泛型


泛型擦除

Java中的泛型是伪泛型,在编译器就会被编译器以实际类型替换。


标识

  1. E:element。在集合中使用,因为集合中存的是元素。如:Set<E>

  2. T:type。一般用来声明类型持有者名称。 如:自定义泛型,类型持有者名称就可以用T

    这里的T只是一个标志,用A/B/C/D…都可以

  3. K:key

  4. V:value

  5. N:number。数值类型

  6. :不确定的Java类型,默认允许Object类及其下的所有子类,即所有Java对象

  7. extends:子类。如:<? extends T>表示所有T的子类

  8. super:父类。如:<? super T>表示所有T的父类

泛型的注意事项

1.泛型不允许基本类型

比如说int calories = menu.stream().map(Dish::getCalories).reduce(Integer::sum); 暗含一个自动装箱和一个自动拆箱的成本,自动装箱很好理解,getCalories()得到的int类型的数据要调用Integersum方法,必须要装箱;但是自动拆箱在哪里呢?答案是.stream()返回的是一个Strem<T>类型,而泛型是不允许基本类型的,所以返回的是一个Integer,那么想要调用getCalories()就必须要拆箱。

2.泛型成员不能是static

1
2
3
public class Exp<T> {
private static T member; //编译报错
}

3.不能创建泛型的实例

1
2
3
4
5
public class Exp<T> {
public Exp() {
new T(); //编译报错
}
}

4.不能创建泛型异常类

1
2
//编译报错
public class GenericException<T> extends Exception {}
-------------本文结束感谢您的阅读-------------

本文标题:Java泛型

文章作者:DragonBaby308

发布时间:2019年07月11日 - 22:46

最后更新:2020年02月14日 - 15:15

原始链接:http://www.dragonbaby308.com/generics/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

急事可以使用右下角的DaoVoice,我绑定了微信会立即回复,否则还是推荐Valine留言喔( ఠൠఠ )ノ
0%