java - 具有泛型类型的字段可能为 null 的泛型类
问题描述
我需要创建一个类,我计划在每个操作结束时返回一个实例。这是带有字段的类:
public class OperationResult<T> {
private OperationStatus status;
private String message;
private T data;
public OperationResult(OperationStatus status, T data, String message) {
this.status = status;
this.data = data;
this.message = message;
}
public OperationResult(OperationStatus status, String message) {
this.status = status;
this.message = message;
}
}
如您所见,有 2 个构造函数:一个需要 T 数据,一个不需要。这是因为某些操作提供了一些详细信息以及状态和消息,而其他操作则不提供。现在,看看下面的方法,它可能返回不同类型的 OperationResult 实例:
OperationResult getCustomerCurrentBalance(int customerId){
if(a<0){
return new OperationResult(OperationStatus.FAIL,"Invalid customer id passed");//No data
}
Customer customer = getCustomerById(customerId);
if(!customer.isActive()){
return new OperationResult(OperationStatus.FAIL,customer,"Customer is not active");//OperationResult<Customer> is returned
}
BigDecimal balance = getCustomerBalance(customerId);
return new OperationResult(OperationStatus.SUCCESS,balance,null);//OperationResult<BigDecimal> is returned
}
如您所见,我无法将方法的返回类型设置为期望特定类型的 OperationResult 类,因为实际上可能会返回不同的版本。如果我这样离开它,编译器不会抱怨,但另一方面,参数化类的原始使用并不好。话虽如此,您对此有任何想法吗?也许我在这个特定要求中尝试使用泛型的方式不正确?
解决方案
如果您找不到更好的解决方案,我会建议您尝试继承。
- 类 OperationResult : 超类
- 类SpecificOperationResult:泛型类
class OperationResult {
protected OperationStatus status;
protected String message;
public OperationResult(OperationStatus status, String message) {
this.status = status;
this.message = message;
}
}
class SpecificOperationResult<T> extends OperationResult {
private T data;
public SpecificOperationResult(OperationStatus status, T data, String message) {
super(status, message);
this.data = data;
}
}
推荐阅读
- php - 从 PHP 连接到 SQL Server
- java - 检查奇怪的 ClassNotFoundException 是否存在
- python-3.x - 已安装模块:ModuleNotFoundError:没有名为“pygame”的模块
- javascript - ASP.NET Core 3.0:当 OnPost() 被命中时显示 GIF
- swift - 映射 EventLoopFuture 时出错
到预期的类型 - java - 设置高亮recyclerview元素被点击,但在开头全部高亮
- python - 如何使用scrapy提取两个不同字符之间的部分URL
- scala - Dotty 中多个参数列表的更好类型推断
- python - Django json.decoder.JSONDecodeError:期望值:第 1 行第 1 列(字符 0)
- python - GET api 请求在 POSTMAN 中有效,但在 python 代码中无效,我想将响应下载为 csv