Java泛型-类型不匹配错误
我有一个定义如下的类:Java泛型-类型不匹配错误,java,generics,Java,Generics,我有一个定义如下的类: public class MultiFacilitySearchDataProvider <T extends Facility & MilepostValue & Copyable<T>> public class MultiFacilitySearchModel implements Copyable<MultiFacilitySearchModel>, Facility, Serializable, Mil
public class MultiFacilitySearchDataProvider <T extends Facility & MilepostValue & Copyable<T>>
public class MultiFacilitySearchModel implements Copyable<MultiFacilitySearchModel>, Facility,
Serializable, MilepostValue, MenuDisplayValues
上面调用的DAO方法如下所示:
public MultiFacilitySearchModel getResultModel() {
return resultModel;
}
多功能搜索模型定义如下:
public class MultiFacilitySearchDataProvider <T extends Facility & MilepostValue & Copyable<T>>
public class MultiFacilitySearchModel implements Copyable<MultiFacilitySearchModel>, Facility,
Serializable, MilepostValue, MenuDisplayValues
公共类MultibilitySearchModel实现了可复制、方便、,
可序列化、里程碑值、菜单显示值
问题在于,行return dao.getResultModel()生成编译错误“类型不匹配:无法从MultibilitySearchModel转换为T”。我不明白为什么会出现这个错误,因为MultibilitySearchModel实现了为泛型类型t指定的三个接口。我缺少什么 您可以将满足前传的任何类指定为类型参数。因此,
T
不必是多功能搜索模型的超类型。但这意味着
return dao.getResultModel()
不能返回扩展T
类型的对象。Java不允许您这样做。方法multifilitySearchDao.getResultModel()
没有泛型类型,将始终返回multifilitySearchModel
,而不是t
虽然multibilitysearchmodel
可以在扩展multibilitysearchdataprovider
的某些类中用作T
,但在您的类中multibilitysearchdao
您拥有该方法
public MultiFacilitySearchModel getResultModel()
protected T getFacility(final FacilityInstance instance)
这显然是在返回一个multifilitysearchmodel
的实例。这里没有通用的东西。返回类型为fix
另一方面,您的类multifilitySearchDataProvider
声明了该方法
public MultiFacilitySearchModel getResultModel()
protected T getFacility(final FacilityInstance instance)
类型变量T
被约束为实现三个接口Facility&MilepostValue&Copyable
。这比作为一个多功能搜索模型要少得多
我可以很容易地创建一个类
public MyFacilitySearchModel implements Copyable<MyFacilitySearchModel>, Facility, MilepostValue