PropertyUtils.isReadable()使用出现的bug

今天做excel 下载的时候 用到了PropertyUtils.isReadable()这个方法;

https://commons.apache.org/proper/commons-beanutils/apidocs/org/apache/commons/beanutils/PropertyUtils.html

下面的和链接里面说的一样

public static boolean  isReadable(Object  bean,
                                  String  name)
true如果指定的属性名称标识指定bean上的可读属性,则返回; 否则返回 false。

详情请参阅PropertyUtilsBean。

参数:
bean - 要检查的豆(可能是一个 DynaBean
name - 待评估的物业名称
返回:
true 如果属性可读,否则 false
抛出:
IllegalArgumentException- 如果bean 还是name现在null
以来:
BeanUtils 1.6
也可以看看:
PropertyUtilsBean.isReadable(java.lang.Object, java.lang.String)

我在使用时出现了一个问题

 private  Map<String, String> getPropertyMap(T t) {
        Map<String, String> propertyMap = new HashMap<String, String>();
        for (Field f : t.getClass().getDeclaredFields()) {

            System.out.println(f.getName());
            if (!**PropertyUtils.isReadable(t, f.getName())**) {
                continue;
            }
            Title tt = f.getAnnotation(Title.class);
            if (null == tt) {
                continue;
            }
            propertyMap.put(tt.value(), f.getName());

        }
        return propertyMap;
    }

PropertyUtils.isReadable(t, f.getName())
调用这个方法是出现了一个问题; 我通过反射获得model类变量里有三个Long 值

  /**
     * 预算金额
     */
    @Title("预算金额")
    @Getter
    @Setter
    private long yAmount;

    /**
     * 列支金额
     */
    @Title("列支金额")
    @Getter
    @Setter
    private long lAmount;

    /**
     * 预算余额
     */
    @Title("预算余额")
    @Getter
    @Setter
    private long amount;

然而 当yAmount和lAmount值进入isReadable方法时会进入 continue;而amount则不会;
在找寻源码解决时也没能解决;
最后的解决方式将原有的

  /**
     * 预算金额
     */
    @Title("预算金额")
    @Getter
    @Setter
    private long yCountAmount;

    /**
     * 列支金额
     */
    @Title("列支金额")
    @Getter
    @Setter
    private long lCountAmount;

两个变量加长 然后就可以正常使用了;
耗费了一下午 也没弄清楚为什么;

———-编辑8/23
今天下载的时候又没出来;
然后把他们首字母大写后发现也可以

/**
     * 预算金额
     */
    @Title("预算金额")
    @Getter
    @Setter
    private long YAmount;

    /**
     * 列支金额
     */
    @Title("列支金额")
    @Getter
    @Setter
    private long LAmount;

你可能感兴趣的:(java)