Java泛型调用feedAnimal遇capture ? extends Animal报错求解
泛型方法调用问题:处理未知具体类型的参数
问题场景
现有一个无法修改签名的泛型方法:
class Shelter { public <T> JsonNode feedAnimal(Class<T> pojoType, T pojo) { ... } }
同时存在如下类结构,且有一个编译时类型为父类、运行时类型未知的实例:
class Animal {} class Cat extends Animal {} class Dog extends Animal {} Animal animal = new Cat(); // 实际可能是Cat、Dog或其他Animal子类实例
需要调用feedAnimal方法,但直接强转成特定子类(如(Cat) animal)的方式不可行,因为无法提前确定animal的实际类型。尝试显式指定泛型类型为Animal的写法:
shelter.<Animal>feedAnimal(animal.getClass(), animal);
会触发编译错误:
Required Class
.
Provided Class <capture of ? extends Animal>
解决方案
直接传入父类的Class对象即可:
shelter.feedAnimal(Animal.class, animal);
补充说明
原担心指定父类Class后,作为序列化方法的feedAnimal无法序列化子类字段,这是错误的假设——该方法依然能正确序列化子类的所有字段。只有对应的反序列化方法才需要指定具体子类类型,这部分不存在问题。
内容的提问来源于stack exchange,提问作者kane
相关产品推荐
相关产品推荐

