我的应用程序中有很少的实体,我希望有一个功能,当用户尝试保存它们时,我可以在它们上一般设置一些属性。
为此,我尝试按如下方式编写实用程序类:
public class IrisUserUtil<T> {
IrisUserRepository irisUserRepository;
public IrisUserUtil(IrisUserRepository irisUserRepository){
this.irisUserRepository = irisUserRepository;
}
public <S extends T> S populate(S entity) {
//IrisUser irisuser = irisUserRepository.findOne(entity.getIrisUserId());
//entity.setFirstName(irisuser.getFirstName());
//entity.setLastName(irisuser.getLastName());
return entity;
}
}
我将在repository.save()
之前致电;在这里,我正在寻找正确的方法来调用函数,如entity.getIrisUserId()
等传递的参数是&#34; entity&#34;。当然,这不起作用。
请说明原因?
答案 0 :(得分:1)
也许是<S extends Entity>
而不是T这里的T是什么?
编译器如何知道S是扩展Entity类(或其他基类)的东西?
public <S extends T> S populate(S entity)
在你的代码中,S和T是扩展Object的东西,编译器不能知道你的方法getIrisUserId(),getFirstName()等......
我认为你必须在课堂上删除你的通用T而只是做
public <S extends Entity> S populate(S entity)
或(但无用且更复杂)
public class IrisUserUtil<T extends Entity> {
和
public <S extends T> S populate(S entity)
或以简单的方式不需要使用泛型类型(但是你必须使用具体类型强制转换返回的实体)
public Entity populate(Entity entity) {
...
return entity;
}
在我的示例中,Entity是您的实体抽象基类