[解決済み] 汎用型パラメータから `.class` 属性を取得するには?
2023-07-27 20:36:36
質問
に対する回答は
この質問
のインスタンスを作成する方法について説明しています。
T
の中に
Generic<T>
クラスで使用することができます。 これには
Class<T>
パラメータを
Generic
のコンストラクタを呼び出して
newInstance
メソッドを呼び出します。
の新しいインスタンスは
Generic<Bar>
が作成され、パラメータ
Bar.class
が渡されます。
の汎用型パラメータが、新しい
Generic
のような既知のクラスでない場合はどうなりますか?
Bar
のような既知のクラスではなく、それ自体が一般的な型パラメータなのでしょうか? 仮に私が他のクラス
Skeet<J>
の新しいインスタンスを作りたかったとします。
Generic<J>
のインスタンスを作成したい。 では、もし私が
J.class
を渡そうとすると、以下のようなコンパイラーエラーが発生します。
cannot select from a type variable.
これを回避する方法はないのでしょうか?
私の場合、エラーを引き起こすコードの特定のビットは、次のとおりです。
public class InputField<W extends Component & WidgetInterface>
extends InputFieldArray<W>
{
public InputField(String labelText)
{
super(new String[] {labelText}, W.class);
}
/* ... */
}
public class InputFieldArray<W extends Component & WidgetInterface>
extends JPanel
{
/* ... */
public InputFieldArray(String[] labelText, Class<W> clazz)
throws InstantiationException, IllegalAccessException
{
/* ... */
for (int i = 0 ; i < labelText.length ; i++) {
newLabel = new JLabel(labelText[i]);
newWidget = clazz.newInstance();
/* ... */
}
/* ... */
}
/* ... */
}
と書くことができないので、エラーが発生します。
W.class
. 同じ情報を渡す他の方法はないのでしょうか?
どのように解決するのですか?
使用方法
.class
を使うことは許されません。
型の消去
,
W
になります。
消される
になります。
Component
を実行時に
InputField
も必要でしょう。
Class<W>
のように呼び出し元から
InputFieldArray
:
public InputField(String labelText, Class<W> clazz)
{
super(new String[] {labelText}, clazz);
}
関連
-
JAVA_HOME環境変数が正しく定義されていない問題を解決する
-
Java基礎編 - オブジェクト指向
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] Java で、あるコンストラクタを別のコンストラクタから呼び出すにはどうすればよいですか?
-
[解決済み] Javaで文字列値からenum値を取得する方法
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] Javaで汎用配列を作成する方法は?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み] 汎用クラスやメソッドのメンバからTの型を取得する方法
-
[解決済み] メソッドの戻り値の型を汎用的にするにはどうすればよいですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Eclipse問題 アクセス制限。タイプ 'SunJCE' が API でないことを解決し、/jdk ディレクトリにある /jre と jre の違いについて理解を深める。
-
Uncaught ReferenceError: は定義されていません。
-
名前 'XXX' を持つ Bean の作成に失敗しました。自動依存関係の注入に失敗しました 解決方法
-
java -jarコマンドでパッケージを実行すると、無効または破損したjarfile xxxx.jarが表示される。
-
Javaジェネリックを1つの記事で
-
Java appears タイプEを囲むインスタンスがアクセスできない。
-
Java基礎 - マッピングとQ/A
-
1分でわかる!恋人の写真をIDEAの背景画像に設定する方法【おすすめ集
-
アクセス制限の解決方法: ---- in Java
-
[解決済み] Javaでジェネリッククラスをインスタンス化する【重複】について