[解決済み】パラメタライズドクラスの未加工利用
2022-02-03 05:18:12
質問
リフレクションによって指定された型の静的フィールドの値を取得するためのヘルパーメソッドを書きました。 コードは正常に動作していますが、行で"raw use of parameterized class"の警告が表示されます。
final List<Collection> fields = getStaticFieldValues(Container.class, Collection.class);
問題は、型パラメータTが汎用型である可能性があることです。メソッドを書き換える方法はありますか?
getStaticFieldValues
この問題を回避するために
コード一覧です。
import static java.util.Arrays.asList;
import static org.junit.Assert.assertEquals;
import java.lang.reflect.*;
import java.util.*;
import org.junit.Test;
public class GenericsTest {
@Test
public void test() {
// Warning "raw use of parameterized class 'Collection'"
final List<Collection> fields = getStaticFieldValues(Container.class, Collection.class);
assertEquals(asList("A", "B", "C"), fields.get(0));
}
private static <T> List<T> getStaticFieldValues(Class<?> fieldSource, Class<T> fieldType) {
List<T> values = new ArrayList<>();
Field[] declaredFields = fieldSource.getDeclaredFields();
for (Field field : declaredFields) {
if (Modifier.isStatic(field.getModifiers()) && fieldType.isAssignableFrom(field.getType())) {
try {
final T fieldValue = (T) field.get(null);
values.add(fieldValue);
} catch (IllegalAccessException e) {
throw new RuntimeException("Error getting static field values");
}
}
}
return values;
}
public static class Container<T> {
public static Collection<String> elements = asList("A", "B", "C");
}
}
解決方法は?
メソッドgetStaticFieldValues()の定義を変更します。
getStaticFieldValues(Class<?> fieldSource, Class<T> fieldType)
になります。
getStaticFieldValues(Class<?> fieldSource, Class<?> fieldType)
関連
-
[解決済み】Java、"変数名 "を変数に解決することができない
-
[解決済み] JavaでArrayListではなくLinkedListを使用するのはいつですか?
-
[解決済み] serialVersionUIDとは何ですか、またなぜそれを使用する必要がありますか?
-
[解決済み] プライベートメソッド、フィールド、インナークラスを持つクラスをテストするにはどうすればよいですか?
-
[解決済み] java.net.URLConnectionを使用してHTTPリクエストを発生させ処理する方法
-
[解決済み] Java内部クラスと静的ネストされたクラス
-
[解決済み] なぜゲッターとセッター/アクセッサーを使うのですか?
-
[解決済み] リフレクションを使ってジェネリックメソッドを呼び出すにはどうしたらいいですか?
-
[解決済み] 汎用型Tのクラスインスタンスを取得する方法を教えてください。
-
[解決済み】Android UserManager.isUserAGoat()の正しい使用例?)
最新
-
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 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] メソッドがスーパータイプのメソッドをオーバーライドまたは実装していない - Overrideの場合
-
[解決済み】「error: '.class' expected」の意味と修正方法について
-
[解決済み】デフォルトのキーストアファイルが存在しない?
-
[解決済み】Gradleがtools.jarを見つけ出さない
-
[解決済み】文字列中の � を置換する方法
-
[解決済み】Javaメソッドスタブ
-
[解決済み] JavaでSSLピアが正しくシャットダウンされない
-
[解決済み】javaで無効な文字定数
-
[解決済み] SQLエラー。0, SQLState: 08S01 通信リンクの失敗 [重複]。
-
[解決済み】 executeQuery()でデータ操作文が発行できない。)