2
這個問題涉及(但不重複)Why does compilation of public APIs leaking internal types not fail?如何在導出的API中聲明內部方法?
一個如何定義枚舉的方法是從內部類只訪問?
具體來說:
- 用戶需要能夠通過
enum
值到API的其他部分。 - 根據用戶傳遞的值爲
enum
,內部類需要調用不同的操作。 - 爲確保將每個
enum
值映射到某個操作,我們在enum
中聲明瞭一個方法。
啓示:
- 的
enum
必須public
和出口。 - 內部類必須位於與
enum
不同的包中,以防止它們被導出。 enum
方法必須爲public
,內部類才能調用它。
我能想到的防止用戶調用public
方法的唯一方法是把它引用非出口型。例如:
public enum Color
{
RED
{
public void operation(NotExported ignore)
{
// ...
}
},
GREEN,
{
public void operation(NotExported ignore)
{
// ...
}
},
BLUE;
{
public void operation(NotExported ignore)
{
// ...
}
};
/**
* Carries out an internal operation.
*
* @param ignore prevent users from invoking this method
*/
public abstract void operation(NotExported ignore);
}
不幸的是,當我這樣做,編譯器會抱怨說導出API引用非出口型。有一個更好的方法嗎?