我有一个名为FamilyHistoryPersonModel
的类,它扩展了一个名为PersonModel
的类。
MapValue mapValue = new MapValue("relatives",
new GenericType<FamilyHistoryPersonModel>() {},
new GenericType<List<FamilyHistoryPersonModel>>() {} //error here
);
构造
private MapValue(String pluralUrl, GenericType<? extends PersonModel> singleResultGenericType, GenericType<List<? extends PersonModel>> listResultGenericType) {
this.pluralUrl = pluralUrl;
this.singleResultGenericType = singleResultGenericType;
this.listResultGenericType = listResultGenericType;
}
错误:
cannot find symbol
symbol : constructor MapValue(java.lang.String,<anonymous com.sun.jersey.api.client.GenericType<com.models.FamilyHistoryPersonModel>>,<anonymous com.sun.jersey.api.client.GenericType<java.util.List<com.models.FamilyHistoryPersonModel>>>)
location: class com.rest.v2.resource.CreatePersonModelIntegrationTest.MapValue
为什么我收到此错误?我如何解决它?我不想更改构造函数以接受GenericType<List<FamilyHistoryPersonModel>> listResultGenericType
我正在使用JDK 1.6
答案 0 :(得分:5)
正如List<Dog>
即使List<Animal>
子类Animal
不是Dog
一样,GenericType<List<FamilyHistoryPersonModel>>
也不是GenericType<List<? extends PersonModel>>
,即使List<FamilyHistoryPersonModel>
是List<? extends PersonModel>
。
解决方案是在顶级泛型类型参数中提供通配符。在MapValue
构造函数中,从
GenericType<List<? extends PersonModel>> listResultGenericType
到
GenericType<? extends List<? extends PersonModel>> listResultGenericType
我认为您还需要更改this.listResultGenericType
的匹配类型。