如何 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
。
如何在一种方法中 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
。