我有一個類,它有一個類型爲Enum的屬性。例如:如何在沒有實現的情況下將枚舉暴露給公共API?
enum CarType {
TOYOTA("Japan"),
AUDI("Germany"),
BMW("Germany");
public final String country;
private CarType(String country) { this.country = country; }
}
class Car {
private CarType type;
public CarType getType() { return type; }
}
類Car
是一個庫的一部分,我想揭露它的功能,所以我創建這將是公共API的一部分接口,並有一流的Car
實現它:
interface ICar {
CarType getType();
}
class Car implements ICar {
private CarType type;
@Override public CarType getType() { return type; }
}
這種方法的問題是,這將需要發佈整個CarType
枚舉。 CarType
枚舉可能包含我不想公開/發佈的其他屬性和方法(本例中爲country
)。
我能做些什麼,如果我想隱藏的CarType
的實現,但我還是想在某種程度上暴露的可能值(聲明枚舉值),從而使API用戶可以在switch
引用它們和if
陳述這樣:
ICar car = ...; // Get an instance somehow.
if (car.getType() == CarType.TOYOTA) System.out.println("It's Toyota.");
製作的附加屬性和方法protected
或private
是不是一個很好的解決方案,因爲該庫的那麼其他部分也將不能引用他們。
如果我想繼續使用Enums,有沒有什麼好的替代方案來解決這個問題?
我接受這個答案,因爲我提到我希望它以enum的形式發佈,並且沒有其他方法可以實現它。雖然我走了一條不同的道路,因爲我想公開一些附加功能(但不是全部),並且顯然不希望複製附加功能。相反,我將枚舉公開爲接口,其中我想發佈的附加功能是接口的一部分,枚舉常量也列爲接口常量。該解決方案還避免了必須進行轉換和實施更改。 – icza