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 TypeMethodDescription取得目前狀態default booleanisInAnyStatus(S... statuses) 檢查是否為指定狀態之一default booleanisInStatus(S status) 檢查是否為指定狀態void設定狀態
-
Method Details
-
getStatus
-
setStatus
設定狀態
建議透過
StatusTransition.validate(S, S, BiPredicate, String)驗證後再呼叫此方法, 確保狀態流轉符合業務規則。- Parameters:
status- 新狀態
-
isInStatus
檢查是否為指定狀態- Parameters:
status- 要比較的狀態- Returns:
- true 如果目前狀態等於指定狀態
-
isInAnyStatus
檢查是否為指定狀態之一- Parameters:
statuses- 要比較的狀態列表- Returns:
- true 如果目前狀態在列表中
-