1

EnumMap は次のように定義されます。

Class EnumMap<K extends Enum<K>,V>

"K extends Enum<K>" とはどういう意味ですか?

たとえば、これを理解できます。

K extends Number

この場合、K は Number を拡張する任意のタイプのオブジェクトです。たとえば、整数。

しかし、どういうK extends Enum<K>意味ですか?

4

4 に答える 4

2

K extends Enum<K>最初の型パラメーターがそれ自体でKある のサブタイプにのみバインドできる型パラメーターを導入します。Enum

于 2013-07-17T23:11:58.543 に答える
1

これは自己参照であり、同じことが java.lang.Enum でも繰り返されます。これは、汎用化されたメソッドが正しくキャストされるようにするためです。 java.lang.Enum.valueOf(Class, String)の定義を参照してください。

同様の使用法の (長い場合) 良い例は、AbstractBuilder を定義するこの記事です。

自己参照ジェネリックへの別のリンク(C# の例ですが、ポイントは同じです)

于 2013-07-17T23:10:34.920 に答える
1

Enum クラスは次のように定義されます。

class Enum<E extends Enum<E>>

これは、ジェネリック型がそれ自体であり、Enum であるクラスであることを意味します。これは、Java 構文で表現される方法にすぎません。

JDK には、似たような例がたくさんあります。

<T extends Comparable<T>>
于 2013-07-17T23:11:33.723 に答える
0

すべての列挙型のスーパークラスはEnum<K>であり、一般的な引数は の型ですEnum<K>。基本的に、これはK列挙型であることを確認するために使用されています。

于 2013-07-17T23:09:21.440 に答える