Java 8 - 打嗝:索引属性

时间:2016-04-25 18:14:04

标签: java java-8

Java 8改变了Introspection的功能 BeanInfo的getPropertyDescriptors()方法。 在Java 8运行时中,getPropertyDescriptors方法不返回索引方法。 例如,如果我们有一个具有以下签名的类Test

  class Test{
            public List<String> getCharges(){
                    return null;
            }

            public String getCharges(int index){
                    return null;
            }
   }

然后Java 8返回非索引(无方法参数)方法 - java.beans.PropertyDescriptor中[名称=收费; propertyType = interface java.util.List; readMethod = public java.util.List com.x.IndexPropertyTest $ Test.getCharges()]

Java 7返回索引方法(带参数) - java.beans.IndexedPropertyDescriptor中[名称=收费; indexedPropertyType = class java.lang.String; indexedReadMethod = public java.lang.String com.x.IndexPropertyTest $ Test.getCharges(int)]

因此,它会破坏任何默认情况下需要索引方法的现有客户端。为了克服遗留反射项目的这个问题,我使用了一个自定义方法来获取索引方法,然后将其返回 -

private Method isIndexMethodPresent(Class aClass, String method) {
    for (Method m : aClass.getDeclaredMethods()) {

        if (m.getName().equalsIgnoreCase("get"+method) && m.getParameterTypes() != null
                && m.getParameterTypes().length == 1)
            for (Class p : m.getParameterTypes()) {
                if ("int".equals(p.getName())) {
                    return m;
                }
            }

    }

    return null;
}

您能否告诉我是否有任何默认方式可以在JRE 1.8中更改此新行为。

0 个答案:

没有答案