繁体   English   中英

Java-以声明的顺序反射getDeclaredMethods奇怪的行为

[英]Java - reflection getDeclaredMethods in declared order strange behaviour

这是getDeclaredMethods发生的奇怪行为,这是场景,一个称为Entity的类:

public class Entity {
private Object reference;

/**
 * @return the reference
 */
public Object getReference() {
    return reference;
}

/**
 * @param reference the reference to set
 */
public void setReference(Object reference) {
    this.reference = reference;
}

public Object getReference2() {
    return reference;
}

public void setReference2(Object reference) {
    this.reference = reference;
}
}

和主类:

public static void main(String Args[]){
    try {
        Entity _entity = new Entity();


        Class _newClass = _entity.getClass();
        Method[] _method = _newClass.getDeclaredMethods();
        for (int i = 0; i < _method.length; i++) {
            System.out.println(_method[i]);
        }


    } catch (IllegalArgumentException | SecurityException ex) {
        Logger.getLogger(MainApp.class.getName()).log(Level.SEVERE, null, ex);
    }
}

输出:

public java.lang.Object Entities.Entity.getReference()
public void Entities.Entity.setReference(java.lang.Object)
public java.lang.Object Entities.Entity.getReference2()
public void Entities.Entity.setReference2(java.lang.Object)

好的,它们是按顺序排列的,那很好,但是当您将refent设置为_entity.setReference(100); ,输出:

public void Entities.Entity.setReference(java.lang.Object)
public java.lang.Object Entities.Entity.getReference()
public java.lang.Object Entities.Entity.getReference2()
public void Entities.Entity.setReference2(java.lang.Object)

所以...为什么setReference在首位? 也许是因为它具有价值? 无论我设置了什么字段,如何保持声明的顺序在类文件中的原样?

无论我设置了什么字段,如何保持声明的顺序在类文件中的原样?

您不能使用getDeclaredMethods 文档对此非常清楚:

返回数组中的元素未排序,并且没有任何特定顺序。

对我来说,尚不清楚该顺序甚至出现在字节码中-您可能需要代码才能确定原始顺序。

最好不要完全依赖顺序-或按照您想要的确定性顺序对数组进行排序。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM