gpt4 book ai didi

java - Java 8 中的通用函数名称

转载 作者:行者123 更新时间:2023-11-30 10:25:07 25 4
gpt4 key购买 nike

我的应用程序中的实体很少,我希望有一个功能,当用户试图保存它们时,我可以在它们上设置一些属性。

为此,我尝试编写了一个实用类,如下所示:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com