【问题标题】:Get only properties count for java class仅获取 java 类的属性计数
【发布时间】:2017-12-07 11:16:10
【问题描述】:

好的,所以我尝试获取类的属性计数。我看到了两个相关的问题,但他们并没有完全回答这个问题。

question one

question two

这两个的问题是,那个

SomeClass.class.getDeclaredFields().length

SomeClass.class.getDeclaredMethods().length

并没有完全按照我的期望返回。我得到了示例类:

SomeClass {
    public static final int ONE = 1, TWO = 2, THREE = 3;

    public static int someMethodOne(){}
    public static int someMethodTwo(){}
}

声明的字段返回 5,根据this 是错误的,应该是 3。声明的方法也无济于事,因为它返回 3,而只有 2 个声明的方法。这有什么问题?

编辑: 尝试使用 Java 8 和 Android Studio 来做到这一点

【问题讨论】:

  • Prolly 即时运行注入一些代码 - 如果您转储名称会更容易...使用没有 proguard 的发布...in "plain" java it works as expected
  • 好的,所以没有办法对开发版本进行这种检查?

标签: java android class properties


【解决方案1】:

当我运行下面的代码时,我得到了32。如果您得到其他值,您还可以打印字段和方法的名称(见下文)。

public class SomeClassChecker {

    public static void main(String[] args) {
        System.out.println(SomeClass.class.getDeclaredFields().length);
        System.out.println(SomeClass.class.getDeclaredMethods().length);

        for (Field field : SomeClass.class.getDeclaredFields()) {
            System.out.println("field: " + field.getName());
        }

        for (Method method : SomeClass.class.getDeclaredMethods()) {
            System.out.println("method: " + method.getName());
        }

    }

} 

Java 8 和 Eclipse。我得到这个(预期的)输出:

3
2
field: ONE
field: TWO
field: THREE
method: someMethodOne
method: someMethodTwo

【讨论】:

  • 嗯,我希望这就像从类内部进行检查,即SomeClass.size();,但是它在两种情况下都返回错误的结果(从类内部和外部类调用它)。我正在运行 Java 8 和 AndroidStudio。
  • 奇怪的是我们得到了不同的结果。请看看我更新的答案。
  • Sooo,我已经打印了两者的名称,并且我得到了额外的字段和方法:field: $changefield: serialVersionUIDmethod: access$super
  • 那我不知道。我不明白字段和构造函数来自哪里。
猜你喜欢
  • 2017-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-11-14
  • 1970-01-01
相关资源
最近更新 更多