java 8中的通用函数名称

时间:2017-09-23 06:30:46

标签: java generics

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

为此,我尝试按如下方式编写实用程序类:

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;。当然,这不起作用。

请说明原因?

1 个答案:

答案 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是您的实体抽象基类