获取字段初始化值

Get field initialization value

我正在通过内省解析 class 定义,想知道 class 是否 明确地 为它的某些字段定义了默认值.

class Foo {
    private int member = 5; // Init value is 5
}

对比

class Foo {
    private int member; // Default value is 0 but no init value defined
}

我可以实例化 class 并获取其成员,但我无法区分 显式 初始化的字段,如 private int member = 0; 来自隐式-像private int member;一样初始化(初始值也是0,除了它不是显式设置)。

我正在通过 getDeclaredFields() 使用内省,这意味着我不能为该字段假定特定类型,所以我不能使用像这样的注释:

@DefaultValue(5)
private int member;

因为:

public @interface DefaultValue {
    Object value() default null; // Error "... only primitive type, String, Class, annotation, enumeration are permitted or 1-dimensional arrays thereof"
}

我正在考虑在这样的注释中使用 String(而不是我想使用的 Object),然后编写一些 deserialize() 方法来解析字符串并检索值,但这似乎有点矫枉过正(如果有更好的方法)并且无法在编译时检查(例如 @DefaultValue("toto") private int member; 可以编译但已损坏)。

来自:这是不可能的,即使有注释。