> 文档中心 > 《Java 核心技术 卷1》 笔记 第12章 泛型程序设计(4) 基本类型处理+类型查询不生效+异常泛型

《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》查找相关笔记

评论🌹点赞👍收藏✨关注👀,是送给作者最好的礼物,愿我们共同学习,一起进步

如果对作者发布的内容感兴趣,可点击下方关注公众号 钰娘娘知识汇总 查看更多作者文章哦!

化妆学校