简化在 Java 中使用一个对象还是另一个对象的决定

Rob*_*uch 2 java

我有一Transaction堂课,看起来像这样:

public class Transaction {

  private Transaction parentTransaction;
  private long amount;
  private String orderNumber;
}
Run Code Online (Sandbox Code Playgroud)

所以它有一个指向另一个的字段Transaction

还有一种方法是这样的:

public class Transaction {

  private Transaction parentTransaction;
  private long amount;
  private String orderNumber;
}
Run Code Online (Sandbox Code Playgroud)

取决于 a 是否parentTransaction存在,例如,该amount字段应从parentTransaction或 中使用transaction。我不喜欢这种方法的地方是该transaction.getParentTransaction() == null ? ...术语的重复使用。

有什么模式或方法可以避免这种情况吗?

Gho*_*ica 5

可选是一种选择,但我认为有一个更简单的解决方案:

public void build(Transaction transaction) {
    Transaction buildFrom = transaction.getParentTransaction() == null ? transaction : transaction.getParentTransaction();
    ...
    String orderNumber = buildFrom.getOrderNumber();
Run Code Online (Sandbox Code Playgroud)

如果您不喜欢这种抽象组合,您可以更进一步,将该行? :放入一个小的辅助方法中。

  • 该辅助方法[确实已经存在(JDK 9+)](https://docs.oracle.com/en/java/javase/17/docs/api/java.base/java/util/Objects.html#requireNonNullElse( T,T)): `Transaction buildFrom = Objects.requireNonNullElse( transaction.getParentTransaction(), transaction);` (3认同)