Interface Stateful<S extends Enum<S>>

Type Parameters:
S - 狀態列舉型別

public interface Stateful<S extends Enum<S>>

狀態感知介面

標記具有狀態欄位的 Entity。實作此介面的 Entity 應具備一個列舉型別的狀態欄位,並可搭配 StatusTransition 管理狀態流轉。

實作範例

@Entity
public class Order implements Stateful<OrderStatus> {

    @Enumerated(EnumType.STRING)
    @Column(length = 30, nullable = false)
    private OrderStatus status = OrderStatus.PENDING;

    @Override
    public OrderStatus getStatus() { return status; }

    @Override
    public void setStatus(OrderStatus status) { this.status = status; }
}

搭配 StatusTransition 使用

// 在 Service 層驗證狀態流轉
public Order updateStatus(String id, OrderStatus newStatus) {
    Order order = repository.findById(id).orElseThrow(...);

    StatusTransition.validate(
        order.getStatus(),
        newStatus,
        OrderStatus::canTransitionTo,
        "Order"
    );

    order.setStatus(newStatus);
    return repository.save(order);
}
See Also:
  • Method Summary

    Modifier and Type
    Method
    Description
    取得目前狀態
    default boolean
    isInAnyStatus(S... statuses)
    檢查是否為指定狀態之一
    default boolean
    isInStatus(S status)
    檢查是否為指定狀態
    void
    setStatus(S status)
    設定狀態
  • Method Details

    • getStatus

      S getStatus()
      取得目前狀態
      Returns:
      目前狀態
    • setStatus

      void setStatus(S status)

      設定狀態

      建議透過 StatusTransition.validate(S, S, BiPredicate, String) 驗證後再呼叫此方法, 確保狀態流轉符合業務規則。

      Parameters:
      status - 新狀態
    • isInStatus

      default boolean isInStatus(S status)
      檢查是否為指定狀態
      Parameters:
      status - 要比較的狀態
      Returns:
      true 如果目前狀態等於指定狀態
    • isInAnyStatus

      default boolean isInAnyStatus(S... statuses)
      檢查是否為指定狀態之一
      Parameters:
      statuses - 要比較的狀態列表
      Returns:
      true 如果目前狀態在列表中