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返回 anObject所以你只有两种方法可以摆脱警告:

  • 声明idObject
  • @SuppressWarnings("unchecked")在方法声明之前添加。
于 2012-05-14T17:30:20.207 回答
-1

添加

@SuppressWarnings("unchecked")

方法声明之前

于 2012-05-14T17:29:46.210 回答