《Java 核心技术 卷1》 笔记 第12章 泛型程序设计(4) 基本类型处理+类型查询不生效+异常泛型
12.6 约束与局限性
12.6.1 不能用基本类型实例化类型参数
无法使用基本类型来描述泛型参数,如:Pair 是不行的
需要用特定转换来处理他们,如下为基本类型转列表:
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
public class Main { public static void main(String[] args) {int[] arr = new int[10]; for (int i = 0; i < 10; i++) { arr[i] = i; } List list = Arrays.stream(arr).boxed().collect(Collectors.toList()); System.out.println(list); } }
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
结果:
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
12.6.2 运行时类型查询只适用于原始类型
作者示例:
例:a instanceof B
这里的 T 是会被忽略的,它和没写 T 的效果是相同的
真的吗?我的环境是 JDK1.8 试试:
编译器报错了呢!
可能是因为系统处理了,那自定义一个泛型类试试:
还是报错了,通不过编译,无需担心这个问题
作者示例2:
例:a.getClass()==b.getClass()
对于两个类型相同、泛型不相同的变量 a 和 b 此处应为 true
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
import java.util.*;import java.util.List;import java.util.stream.Collectors; public class Main { public static void main(String[] args) { Main main = new Main();int[] arr = new int[10]; for (int i = 0; i < 10; i++) { arr[i] = i; } List list = Arrays.stream(arr).boxed().collect(Collectors.toList()); Pair pair = main.new Pair("a","b"); Pair pair2 = main.new Pair(1,2);// if(pair2 instanceof Pair){// System.out.println(1);// } System.out.println(pair.getClass() == pair2.getClass()); System.out.println(list); } class Pair{ T first; T second; public Pair(T first, T second){ this.first = first; this.second = second; } } }
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
结果:
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
12.6.3 能抛出也不能捕获泛型类实例
Java 的 catch 不支持泛型:
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
public class Main { public static void main(String[] args) { Main main = new Main(); } public static Logger logger = Logger.getLogger(Main.class.getPackage().getName()); public static void doWork(T t){ try{ }catch (T e){ logger.info("abc"); } } }
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
编译结果(不通过):
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
Java 的 throws 支持泛型:
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
public class Main { public static void main(String[] args) { Main main = new Main(); } public static Logger logger = Logger.getLogger(Main.class.getPackage().getName()); public static void doWork(T t) throws T{ try{ }catch (Throwable e){ t.initCause(e); throw t; } } }
❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤❤🧡💛💚💙💜🤎🖤
编译效果(通过):
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
🚗🚓🚕🛺🚙🚌🚐🚎🚑🚒🚚🚛🚜🚘🚔🚖🚍🦽🦼🛹🚲🛴🛵🏍
相关内容:选择 《Java核心技术 卷1》查找相关笔记
评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步
如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!