0

id = (PK) m.invoke(obj, (Object []) null);" "から警告を削除するにはどうすればよいですか?

    private PK getId(T obj) {
    PK id = null;
    for (Field f : type.getDeclaredFields()) {
        if (f.getAnnotation(Id.class) != null) {
            String name = f.getName();
            String method = "get" + name.substring(0, 1).toUpperCase() + name.substring(1);
            try {
                Method m = type.getDeclaredMethod(method, (Class<?>) null);
                id = (PK) m.invoke(obj, (Object []) null);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    return id;
}
4

3 に答える 3

2

私は PK があなたのクラスのジェネリック型であると仮定しています

class MyClass<PK> {

Java 型消去のため、型 PK は実行時に使用できません。ただし、コンストラクターでインスタンスを受け入れる場合はClass<PK>、呼び出すことでこれを回避できますklass.cast(...)

class MyClass<PK> {
    private final Class<PK> keyClass;
    MyClass(Class<PK> keyClass) {
         this.keyClass = keyClass;
    }

    PK getKey() {
        return keyClass.cast(...);
    }
}

なんらかの理由で PK の実際のランタイム タイプへの参照を取得できない場合は、警告を抑制する以外にほとんど手段がありません。

于 2012-05-14T17:30:59.797 に答える
0

Method#invokeを返すObjectため、警告を取り除く方法は 2 つしかありません。

  • 次のように宣言idします。Object
  • @SuppressWarnings("unchecked")メソッド宣言の前に追加します。
于 2012-05-14T17:30:20.207 に答える
-1

追加

@SuppressWarnings("unchecked")

メソッド宣言前

于 2012-05-14T17:29:46.210 に答える