java - 如何考虑超类中静态方法的行为?
问题描述
我需要创建一系列将一个对象转换为另一个对象的转换器类。
它们的形式
class Transformer1 {
public static AnotherClass transform(MyClass source) {
return AnotherClass.newBuilder()
.setName(source.getName())
// etc
.build();
}
}
我有大约15个。
这些转换器现在假设参数不为空。否则我会得到一个 NullPointerException。
我想添加一个空检查,即:
class Transformer1 {
public static AnotherClass transform(MyClass source) {
if(source == null)
return null;
return AnotherClass.newBuilder()
.setName(source.getName())
// etc
.build();
}
}
但我不想在每个变压器类上都写这个空检查。我正在考虑将其分解为超类或接口。
abstract class BaseTransformer {
public static AnotherClass transform(MyClass source) {
return source == null ? null : transformNonNull(source);
}
public abstract AnotherClass transformNonNull(MyClass source);
}
我所有的子类都可以实现该transformNonNull
方法。
现在这不起作用,因为我们正在处理静态方法并且transformNonNull
需要是静态的。但它不能是静态的和抽象的。
我可以使我的变压器非静态,但实际上它们没有状态并且更像是实用程序,所以我想让它们保持静态。
我过去已经遇到过这个问题,并没有真正想出解决方案。什么是这里最好的方法?
编辑:
对象 A 具有字段 a1、a2、... Ax,我想将其转换为具有字段 b1、b2、... bx 的对象 B
我的变压器是这些领域相互转化的变压器。就我而言,a2
可能为空,这是完全可以接受的。a2
如果为 null 并且我无法从中构建,我不想通过异常b2
。在这种情况下,我也想设置b2
为 null
解决方案
您可以使用 AspectJ 将空检查插入到相关方法中。
推荐阅读
- python - 多个链式生成器能否在多个 CPU 内核上并行化
- .net-core - Dot net core 在通过 azure devops 部署时如何使用 appsettings.[envname].json?
- python - 加载 csv 文件时 python/pandas “内核死亡,正在重新启动”
- django - 生成多个 PDF 并压缩它们以供下载,所有这些都在一个视图中
- java - java中不包含特殊单词的正则表达式
- javascript - Javascript:添加 CSS 类并保存到 cookie
- c - 确定 C 中包含哪个文件的最简单方法?
- javascript - 我想获取用户在输入提示中输入的数字(整数/浮点数)的长度
- typo3 - TYPO3 tx_news:特定类别的 CSS 样式
- javascript - vue数据更改后Highcharts图表未重绘