如何 return 与 Java 中的映射器方法不同的类型?

How to return different types from mapper method in Java?

如何在一种方法中 return 不同的类型并在它们之上进行集合操作? 比如我有几个类似的classes:AddDeveloperResponse, EditDeveloperResponse, DeleteDeleveloperResponse

总的来说,我有 3 种方法,其中我 return 这些不同的 classes,但我认为它可以用一种方法制作这些东西

它们包含相同的字段:

@Getter
@Setter
@ToString
@EqualsAndHashCode
public class DeleteDeveloperResponse extends DeveloperResponseBaseEntity<DeleteDeveloperResponse >{
   private long id;
   private BigDecimal salary;
   private String message;
}

我创建了一个基本的class,但我不知道如何正确连接它们:

@Getter
@Setter
public abstract class DeveloperResponseBaseEntity<T> {
   private long id;
   private BigDecimal salary;
   private String message;
}

这是我的方法,应该如下所示:

public <T extends > T getDeveloperResponseFromDeveloper(Developer developer) {
    T response = new T(); //but we can't create object of Generic 
    // OR T response = new DeveloperResponseBaseEntity<T>;
    response.setId(developer.getd());
    //other set operations
    return response;
}

我想用不同的 class 调用这个方法,例如:

AddDeveloperResponse addDevResponse = userMapper.getDeveloperResponseFromDeveloper(Developer);
EditDeveloperResponse editDevResponse = userMapper.getDeveloperResponseFromDeveloper(Developer);
//OR
EditDeveloperResponse editDevResponse = userMapper.<EditDeveloperResponse>getDeveloperResponseFromDeveloper(Developer);

如果可以,请向我解释一下它在 java

中的一般工作原理

如果你知道相关主题,请在评论中发送,我将不胜感激

你也许可以使用这样的东西:

public <T extends DeveloperResponseBaseEntity<T>> T getDeveloperResponseFromDeveloper(Developer developer, Supplier<? extends T> responseConstructor) {
    T response = responseConstructor.get();
    response.setId(developer.getId());
    // other set operations
    return response;
}

然后这样调用它,假设 AddDeveloperResponse 有一个无参数的构造函数:

AddDeveloperResponse addDevResponse = userMapper.getDeveloperResponseFromDeveloper(Developer, AddDeveloperResponse::new);

您可能知道,您不能直接实例化泛型类型,因此您需要稍微帮助一下 java。我用 Supplier<? extends T> responseConstructor 做到了这一点,您可以在其中传递要实例化的类型的构造函数。您也可以直接传递一个实例,即将 Supplier responseConstructor 直接替换为 T response