6

定義されている列挙型に javac がメソッドをvalues()追加するのはなぜですか? valueOf(String)Enum クラス自体に追加したほうがよかったのではないでしょうか?

つまり、次のような列挙型がある場合

enum FooEnum {ONE, TWO}

javac は、コンパイル時にvalues()andvalueOf(String)を追加します。FooEnum少し奇妙だと思います。この背後にある理由は何ですか?

返された値の型の安全性を確保するためだけですか、それとも他に何かありますか? 型安全性だけが目的なら、ジェネリックは役に立ちませんか?

4

2 に答える 2

6

定義されている列挙型に javac が values() および valueOf(String) メソッドを追加するのはなぜですか?

これにより、クラスは自己完結型になります。

Enum クラス自体に追加したほうがよかったのではないでしょうか?

Enum クラスは既にコンパイルされており、どのような場合でも同じコピーを使用していない可能性があるため、コンパイラはこれを行うことができません。

これは実行時に行うことができますが、複雑さを追加します。たとえば、クラスのアンロードがより困難になり、ほとんどメリットがありません。

この背後にある理由は何ですか?

それを置くのに良い場所はありません。

注:をEnum.valueOf(clazz, name)呼び出すclazz.valueOf(name);のは意味がないため、呼び出しますclazz.valueOf(clazz, name);(ただし、人々を混乱させたい場合は呼び出します)。

于 2012-10-03T07:38:14.720 に答える
6

それらは静的メソッドです。どのようにして に追加できたのEnumでしょうか? 静的メソッドは多態的ではありません。Enumさらに、提案されたスキームでは、実装はどのように見えるでしょうか? Enumそれ自体は値を知りません - 具体的な型だけが知っています。

于 2012-10-03T07:37:20.597 に答える