Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/382.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/290.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 通过循环列表从JPA元模型获取SingularAttribute_Java_Jpa - Fatal编程技术网

Java 通过循环列表从JPA元模型获取SingularAttribute

Java 通过循环列表从JPA元模型获取SingularAttribute,java,jpa,Java,Jpa,我有一个JPA元模型,从中检索属性 @StaticMetamodel(Test.class) 公开课考试_{ 公共静态属性var1; 公共静态属性var2; 公共静态属性var3; } 我可以手动调用和使用它们: 测试变量1 测试变量2 测试变量3 但我如何通过循环浏览列表来做到这一点: List vars=new ArrayList(); 增加变量(“变量1”); 增加变量(“变量2”); 增加变量(“变量3”); 对于(int i=0;i

我有一个JPA元模型,从中检索属性

@StaticMetamodel(Test.class)
公开课考试_{
公共静态属性var1;
公共静态属性var2;
公共静态属性var3;
}
我可以手动调用和使用它们:

测试变量1
测试变量2
测试变量3
但我如何通过循环浏览列表来做到这一点:

List vars=new ArrayList();
增加变量(“变量1”);
增加变量(“变量2”);
增加变量(“变量3”);
对于(int i=0;i
如何使用string
var
从元模型中获取属性


更新 我尝试使用java反射,正如在循环中所建议的那样,但没有成功:

//假设是
System.out.println(测试变量1);//com.example.entities.Test.var1
System.out.println(Test.var1.getType());//布尔值
//在列表中循环
类对象=测试类;
试一试{
Field=object.getDeclaredField(var);
field.setAccessible(true);//public static volatile javax.persistence.metamodel.SingularAttribute com.example.entities.Test.var1
System.out.println(字段);//com.example.entities.Test.var1
System.out.println(field.getType());//接口javax.persistence.metamodel.SingularAttribute
//但还是没有表情
}捕获(无此字段例外){
System.out.println(“错误”);
}

它不会返回正确的名称或类型(请参见代码中的输出注释)。

在反射代码中,您直接使用字段,但这不是您要查找的静态SingularAttribute(Test.var1)值。您需要使用
field.get(null)


vars
列表已创建,但未填充。它是空的!使用反射@naXa抱歉我的坏我复制了错误的部分作为示例。。。我改正了。名单存档了!关于反射,这就是我尝试的(见更新)。现在我尝试使用
getDeclaredField()
,但没有成功?任何进一步的提示?var.getJavaType()不起作用?@fg78nc没有这样的方法。但是无论如何,请检查正确的答案。thx的答案,这就是我要找的。
Field[] fields = Test_.class.getDeclaredFields();
for (Field field : fields) {
    if (Modifier.isPublic(field.getModifiers())) {
        // For Each Public Field
        try {
            Object obj = field.get(null); // Equivalent to Test_.var1 but you need to cast it
            if (obj instanceof SingularAttribute) {
                System.out.println(obj); // Equivalent to Test_.var1
                System.out.println(SingularAttribute.class.cast(obj).getType()); // Equivalent to Test_.var1.getType()
            }
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}