考慮以下表示物體并具有回傳EnumA型別資料的方法的類
物體A類:
public class EntityA
{
public Set<EnumA> getProcessedFlags() { ... }
}
列舉:
public enum EnumA {
READ_ONLY,
READ_WRITE,
PERMISSION_DENIED,
COMMENT_ENABLED
}
現在我需要再添加一個EntityB,它類似于EntityA,但在邏輯上有所不同。(相同的方法簽名但不同的實作:
還有一件事,EntityA 中的 EnumA 的回傳值是EntityB的** EnumB。
EnumA和EnumB是兩個不同的集合,它們表示邏輯上相同標志的集合,但每個標志都有一些獨占值:
列舉B
public enum EnumB {
READ_ONLY,
READ_WRITE,
LIKE_ENABLED
}
所以為了重構它,我創建了一個抽象基類 - EntityBase,并創建了EntityA和EntityB,這個基類的子類。
問題是列舉不可擴展,有沒有好的方法來重構它?
我想創建如下所示的類結構:
public enum EnumBase {}
public enum EnumA extends EnumBase {}
public enum EnumB extends EnumBase {}
public abstract class EntityBase
{
public Set<? extends EnumBase> getProcessedFlags();
}
public class EntityA extends EntityBase
{
public Set<EnumA> getProcessedFlags() { ... }
}
public class EntityB extends EntityBase
{
public Set<EnumB> getProcessedFlags() { ... }
}
由于 java 中的列舉是不可擴展的,我們可以有一些更好的設計來維護這個 EntityBase 類嗎?
uj5u.com熱心網友回復:
很難在沒有更多背景關系的情況下提供具體建議,但值得注意的是列舉可以共享介面,因此您可以嘗試以下操作:
interface Base {
String name();
}
interface A extends Base {}
interface B extends Base {}
public enum EnumBase implements A, B {
READ_ONLY,
READ_WRITE
}
public enum EnumA implements A {
PERMISSION_DENIED,
COMMENT_ENABLED
}
public enum EnumB implements B {
LIKE_ENABLED
}
public abstract class EntityBase<F extends Base> {
public abstract Set<F> getProcessedFlags();
}
public class EntityA extends EntityBase<A> {
@Override
public Set<A> getProcessedFlags() { ... }
}
public class EntityB extends EntityBase<B> {
@Override
public Set<B> getProcessedFlags() { ... }
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/411682.html
標籤:
