【问题标题】:Is possible getMethods in order using reflections? [duplicate]是否可以使用反射按顺序获取方法? [复制]
【发布时间】:2011-10-23 05:44:09
【问题描述】:

可能的重复:
Java Reflection: Getting fields and methods in declaration order
Java. Get declared methods in order they apear in source code

假设我有这门课

可以按顺序使用getter方法吗?

public class ClassA {

private String name;
private Integer number;
private Boolean bool;

public String getName() {
    return name;
}

public void setName(String name) {
    this.name = name;
}

public Integer getNumber() {
    return number;
}

public void setNumber(Integer number) {
    this.number = number;
}

public Boolean getBool() {
    return bool;
}

public void setBool(Boolean bool) {
    this.bool = bool;
}

}

我已经尝试过了..

for (Method method : ClassA.class.getDeclaredMethods()) {
    if (!(method.getReturnType().toString().equals("void"))) {
        method.invoke(obj, new Object[0])));
    }
}

我从文档中得到这个

...返回的数组中的元素没有排序,也没有任何特定的顺序...

所以.. 就是这样吗?存在一些替代方案还是我只需要实现一些东西?

【问题讨论】:

  • 您整理方法的最终目的是什么?
  • 通常看到这些方法按源代码顺序返回方法,但正如您所指出的,规范保证。如果 JVM 没有按照这个顺序给你,你真的无能为力,除了手动解析 .class 文件。
  • 您不能使用反射,但是如果您阅读字节码,您可以使用代码中的行号来确定方法的原始顺序。
  • @Peter 有趣。行号之间的简单比较看起来不错。怎么获取字节码?

标签: java reflection


【解决方案1】:

您可以为每个方法添加您自己的@annotation,其中包含一个数字。然后获取所有 getter 方法,并使用您的自定义排序器根据您使用 Collections.sort() 传递给注释的数字对它们进行排序。

例如:

@SortedMethod(100)
public String getName()
{
    return name;
}

@SortedMethod(200)
public String getNumber()
{
    return number;
}

【讨论】:

  • 我还没有测试!但如果有效,它就是完美的。谢谢!
猜你喜欢
  • 1970-01-01
  • 2011-06-27
  • 2014-04-13
  • 2015-01-10
  • 2014-04-19
  • 1970-01-01
  • 2019-11-20
  • 2017-10-03
  • 2012-09-17
相关资源
最近更新 更多