gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 06:59:25 25 4
gpt4 key购买 nike

这是 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)

好的,它们是有序的,没关系,但是当您将引用设置为 _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 排在第一位?也许是因为它有值(value)?无论我设置了哪些字段,我如何才能保持类文件中声明的顺序?

最佳答案

How can I keep the declared order as it is in the class file, no matter what fields I set?

你不能,使用 getDeclaredMethodsdocumentation对此非常清楚:

The elements in the returned array are not sorted and are not in any particular order.

我不清楚顺序是否存在于字节码中 - 您可能需要代码来确定原始顺序。

尽管根本不依赖排序会更好 - 或者按照您想要的任何确定性顺序对数组进行排序。

关于Java - 声明顺序中的反射 getDeclaredMethods 奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28585843/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com