0

この質問へのコメント: Java状態で列挙型を反復する「for」ループ:

@jacktrades: コンパイラにのみ存在する暗黙的なメソッドです。したがって、基本クラスは同じ名前のメソッドを宣言できないため、自動生成された Javadoc には含まれません。docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2 – Torben 3 月 5 日 9:32

このメソッドはコンパイラにのみ存在するため、 Enum オブジェクトが jdk1.5 で使用可能になる前に存在していたことを意味しますか? このメソッドは、コンパイラのみの他のオブジェクトに存在しますか? java.util.Map には values() メソッドが含まれていますが、これは文書化されているため、明示的ですか? なぜこのメソッド .values を暗黙的に定義するのですか?これは Enum 型で便利なメソッドなので、明示的で Enum オブジェクト型で使用できる必要があります。

4

1 に答える 1

2

このメソッドはコンパイラにのみ存在するため、 Enum オブジェクトが jdk1.5 で使用可能になる前に存在していたことを意味しますか?

いいえ、Java 5 で追加されました。

このメソッドは、コンパイラのみの他のオブジェクトに存在しますか? java.util.Map には values() メソッドが含まれていますが、これは文書化されているため、明示的ですか?

それは違う。 インターフェースMap.values()の一部である通常のメソッドです。Mapどの列挙型でも、values() は静的メソッドです。主な違いは、静的メソッドは継承されないため、values()java.lang.Enum に追加しても役に立たないことです。別の暗黙的なメソッドは[EnumType].valueOf(String name).

なぜこのメソッド .values を暗黙的に定義するのですか?これは Enum 型の便利なメソッドなので、明示的にする必要があります

繰り返しますが、静的メソッドは継承されないため、明示的にする方法はありません。にはvalueOfアナログvalueOf(class<T> type, name)方式があるからjava.lang.Enumです。なぜそこにないのかわかりませんvalues(class<T> type)。それは私には理にかなっていたでしょう。しかし代わりにClass.getEnumConstants()、同じことを行う があります。

于 2013-11-14T13:37:33.873 に答える