将GenericEntity匿名类转回List类型时出现类转换异常
解决GenericEntity强转List时的ClassCastException问题
嘿,我一眼就看出问题所在了——你踩了个很容易犯的小坑:直接把GenericEntity实例强转成List<Integer>完全行不通,因为它们根本不属于同一个类型体系!
先搞懂为什么会报错
你打印的gEntity.getClass()输出是com.org.dept.proj.MyClass$12,这说明gEntity是GenericEntity的匿名子类实例,它本质上是个用来包装泛型对象的“容器”,本身并不是List接口的实现类。就像你不能把装着苹果的盒子直接当成苹果啃一样,直接强转自然会抛出ClassCastException。
GenericEntity是JAX-RS里用来保留泛型类型信息的工具类(因为Java的类型擦除会让泛型在运行时丢失),它的作用是帮REST服务正确处理泛型集合的序列化/反序列化,而不是替代你原本的List对象。
正确的解决姿势
要拿到内部的List<Integer>,你得调用GenericEntity提供的getEntity()方法,这才是取出包装内容的正确方式。
修改后的完整代码如下:
List<Integer> lstInt = new ArrayList<Integer>(); lstInt.add(1); lstInt.add(2); GenericEntity<List<Integer>> gEntity = new GenericEntity<List<Integer>>(lstInt) {}; System.out.println(gEntity.getClass()); // 输出com.org.dept.proj.MyClass$12 List<Integer> output = (List<Integer>) gEntity.getEntity(); // 这里不再抛出异常 System.out.println(output); // 会正常输出[1, 2]
内容的提问来源于stack exchange,提问作者Veer7
相关产品推荐
相关产品推荐

