我的应用程序中的实体很少,我希望有一个功能,当用户试图保存它们时,我可以在它们上设置一些属性。
为此,我尝试编写了一个实用类,如下所示:
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()
等函数,传递的参数是“entity”。当然,这是行不通的。
请说说为什么?
最佳答案
也许用 <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 是您的实体抽象基类
关于java - Java 8 中的通用函数名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46376769/