此问题与(但不重复)为什么泄漏内部类型的公共 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 引用了非导出的类型。有一个更好的方法吗?