列挙型でプライベート抽象メソッドを記述することは完全に合法ではないでしょうか? 見えないのに禁止する理由あるの?
コンパイルされないおもちゃのコードの例を以下に示します。シングルトンが複数かどうか以外のAPIにコミットしたくないと仮定しましょう。
これは抽象メソッドなしで実装できますが、これは単なる例であることに注意してください。それを禁止する一般的な理由があるかどうかを尋ねています。
enum Count{
SINGLE {
private int howMany() {
return 1;
}
},
DOUBLE{
private int howMany() {
return 2;
}
};
private abstract int howMany();// !! this declaration is illegal
public boolean isMultiple(){
return this.howMany() > 1;
}
}
public static void main (String... args){
System.out.println(Arrays.toString(Count.values()));
for(Count s : Count.values()){
System.out.println(s.howMany() + " is " + (s.isMultiple() ? "many" : "one"));
}
}
edit1: これは、プライベート抽象メソッドが一般的に禁止されている理由を尋ねているわけではありません。そのような使用が理にかなっている例を提供して、列挙型での使用が違法である理由を尋ねています。これは重複ではありません。Stackoverflow で答えが見つかりませんでした。一般的なケースに対する答えはここでは当てはまりません。