【问题标题】:Check if a field is true or false with reflections in java用java中的反射检查一个字段是真还是假
【发布时间】:2020-03-16 01:07:52
【问题描述】:

目前正在尝试编写一些菜单功能,并想知道是否有办法找出布尔字段是真还是假。这是我目前正在尝试的代码,但出现错误

try{

     field = a.getClass().getField(b); 

     if(toggle==1&&field){
     }else if(toggle==1&&!field){
       field.set(a, true);
     }else if(toggle==0&&!field){
     }else if(toggle==0&&field){
       field.set(a, false);
     }
}catch (NullPointerException e) {
}catch (NoSuchFieldException e) {
}catch (IllegalAccessException e) {
}

错误是

The operator && is undefined for the argument type(s) boolean, Field

【问题讨论】:

  • 当你知道set(a, false)时,你应该知道get(a),或者getBoolean(a)。但是为什么要在这些多余的检查上浪费时间呢? if(toggle==1) field.set(a, true); else if(toggle==0) field.set(a, false); 就是这样。将字段设置为它已经具有的值无论如何都没有效果。如果toggle 总是八个零或一,那么即使field.set(a, toggle != 0); 也足够了。

标签: java reflection boolean field


【解决方案1】:

需要根据实例获取字段的值。

boolean value = field.getBoolean(instance);

【讨论】:

    【解决方案2】:

    a.getClass().getField(b); 返回java.lang.reflect.Field;,不是布尔类型。

    您可以使用 field.getBoolean(a) 获得布尔值。

    【讨论】:

      【解决方案3】:

      Class.getField(String) 返回一个java.lang.reflect.Field。你会想用a 作为参数调用getBoolean。请注意,您假设该字段是公共的,这可能不是一个好主意。此外,反射通常是一个非常糟糕的主意。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-01-21
        • 2021-11-23
        • 2019-08-09
        • 2019-12-24
        • 1970-01-01
        • 2016-05-10
        • 1970-01-01
        • 2020-01-30
        相关资源
        最近更新 更多