0

こんにちは!

2 つのクラス (A と B)、および G (Java のジェネリック クラス) が与えられた場合。

ジェネリック クラスをG<A>orとして定義した場合G<B>、 A と B がクラス自体として定義されていることに違いはありますか? 文字はクラス属性/メソッド内で使用される単なるパラメーターであり、初期化時に G がパラメーター化されたクラスに置き換えられるため、私の直感はノーです。しかし、G 内にタイプ A または B の属性が必要な場合はどうすればよいのでしょうか。

4

2 に答える 2

4

ジェネリック型変数は、他の変数と同様にスコープを持ちます。それらのスコープは、それらが宣言されているクラスの本体です。

そのクラス内では、それらが定義された名前は常にジェネリック型を参照します。別の場所で宣言された同じ名前の別の型がある場合は、その完全修飾名を使用する必要があります。

class Generic<Integer> {
    Integer ourTypeVariable;
    java.lang.Integer realInteger;
}

特に一般的な型名 (基本的に JDK のすべて) については、このようにコーディングしないでください。

于 2014-10-27T01:33:46.953 に答える
2

はい、これでうまくいきます (ただし、混乱を招く可能性があります)。

以下は同等です

class G<A> {}
class G<B> {}
class G<T> {}
class G<String> {}

したがって、混乱を減らすプレースホルダー名を選択することをお勧めします。

しかし、G 内にタイプ A または B の属性が必要な場合はどうすればよいのでしょうか。

繰り返しますが、プレースホルダーに別の名前を付けることで、これを回避できます。

ただし、必要に応じて、完全修飾名で曖昧さをなくすことができます。

class G<A>{
   my.com.package.A someVariable;
}
于 2014-10-27T01:33:48.940 に答える