2
この問題はに関連している(しかしによって重複しない)Why does compilation of public APIs leaking internal types not fail?エクスポートされたAPIで内部メソッドを宣言するにはどうすればよいですか?
がどのように1は、内部クラスからのみアクセス可能な列挙型のメソッドを定義することができますか?
は、具体的に:
- ユーザーがAPIの他の部分に
enum
値を渡すことができるようにする必要があります。 - ユーザーが渡した値
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は、非エクスポートタイプを参照すると文句を言い。これを行うより良い方法はありますか?