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