有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

反射如何确定类成员是否是静态的以及Java中的字段

如何确定类的成员是静态的还是字段? 我试着用这个。getModifiers()方法,但它没有返回所需的结果

  • 成员:
    • 成员标识符
    • 包含此成员的类的标识符
    • 布尔值:如果成员是静态的,则为true,否则为false
    • 布尔值:如果成员是字段,则为true;否则就错了
    • 成员(返回)类型的限定名称
    • 数组限定符:“”表示返回类型不是数组,[]表示1D数组,[[]表示2D数组,依此类推
    • 成员签名:对于字段,它是字段的名称。对于方法,它是该方法的名称,后跟其参数列表

yparser所需的输出。连接包是:

bcClass(c0,'yparser.connection','Object').

/* public Constructors */
bcMember(m0,c0,true,false,'yparser.connection','','connection(String,String,String,String,String,String)').

/* public Fields */
bcMember(m1,c0,true,true,'String','','quote').
bcMember(m2,c0,true,true,'String','','comma').
bcMember(m3,c0,false,true,'String','','name1').
bcMember(m4,c0,false,true,'String','','role1').
bcMember(m5,c0,false,true,'String','','end1').
bcMember(m6,c0,false,true,'String','','name2').
bcMember(m7,c0,false,true,'String','','role2').
bcMember(m8,c0,false,true,'String','','end2').

/* public Methods */
bcMember(m9,c0,true,false,'void','','dump()').

共 (2) 个答案

  1. # 1 楼答案

    fields[] fld= TheClass.class.getDeclaredFields();
    for (Field fldd : fld) {
        if (java.lang.reflect.Modifier.isStatic(fldd.getModifiers())) {
            //Then the fldd is static
        }
    }
    
  2. # 2 楼答案

    你知道它是一个字段,因为它是一个Field对象

    要确定它是否是静态的:

    if(Modifier.isStatic(f.getModifiers()))
        System.out.println("Field is static!");
    

    或者

    if((f.getModifiers() & Modifier.STATIC) != 0)
        System.out.println("Field is static!");