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

标签 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() 等函数,传递的参数是“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/

相关文章:

java - 如何在抽象方法中使用泛型 EnumMap 作为参数

c# - 接受 List<T> 的通用方法

java - 'int' 类型的大数组需要传递给通用数组和集合

java - 如何将 getConstructor 与泛型类一起使用?

c# - 具有泛型的可空原语

java - 如何将位图从服务发送到 java、android 中的主程序?

Java - 更新/更改 JFrame 的内容 - (删除旧内容)并插入新内容(面板 itd。)

java - 参数最大长度的 Jax RPC Web 服务定义

Java SQL : Statement. hasResultSet()?

java - 如何从不可变对象(immutable对象)创建实例?