Java开发中如何无警告返回泛型类型对应的Class对象
问题解决方案
Java泛型基于类型擦除实现,运行时泛型参数会被抹除,ChoiceBox.class本身的静态类型为Class<ChoiceBox>,无法直接匹配Class<ChoiceBox<?>>的返回类型要求,可通过两次强制类型转换配合注解实现无警告返回:
@SuppressWarnings("unchecked") public Class<ChoiceBox<?>> getApplicableClass() { return (Class<ChoiceBox<?>>) (Class<?>) ChoiceBox.class; }
原理说明
- 直接将
Class<ChoiceBox>强转为Class<ChoiceBox<?>>会触发编译类型不兼容报错,先转成无边界通配的Class<?>可绕过该校验 @SuppressWarnings("unchecked")用于消除强制类型转换触发的unchecked警告,该转换是安全的:所有带不同泛型参数的ChoiceBox<T>运行时对应的Class对象都是同一个ChoiceBox.class
内容的提问来源于stack exchange,提问作者Mumrah81
相关产品推荐
相关产品推荐

