Java 警告:类型安全:未选中从对象到主键的强制转换

Java 警告:类型安全:未选中从对象到主键的强制转换,java,object,warnings,Java,Object,Warnings,如何从“id=(PK)m.invoke(obj,(Object[])null;”中删除警告 private PK getId(T obj){ pkid=null; 对于(字段f:type.getDeclaredFields()){ 如果(f.getAnnotation(Id.class)!=null){ String name=f.getName(); String method=“get”+name.substring(0,1).toUpperCase()+name.substring(1);

如何从“
id=(PK)m.invoke(obj,(Object[])null;”
中删除警告

private PK getId(T obj){
pkid=null;
对于(字段f:type.getDeclaredFields()){
如果(f.getAnnotation(Id.class)!=null){
String name=f.getName();
String method=“get”+name.substring(0,1).toUpperCase()+name.substring(1);
试一试{
方法m=type.getDeclaredMethod(方法,(类)null);
id=(PK)m.invoke(obj,(Object[])null);
}捕获(例外e){
e、 printStackTrace();
}
}
}
返回id;
}
添加

在方法声明之前

方法#invoke
返回一个
对象
,因此只有两种方法可以消除警告:

  • id
    声明为
    Object
  • 在方法声明之前添加
    @SuppressWarnings(“未选中”)

我假设PK是类中的泛型类型

class MyClass<PK> {

如果出于任何原因,您无法获得对PK的实际运行时类型的引用,那么您只能抑制警告。

它返回PK,因此您不能将id声明为对象
@SuppressWarnings("unchecked")
class MyClass<PK> {
class MyClass<PK> {
    private final Class<PK> keyClass;
    MyClass(Class<PK> keyClass) {
         this.keyClass = keyClass;
    }

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