获取字段初始化值

时间:2019-10-16 21:03:09

标签: java reflection initialization introspection

我正在通过自省来解析类定义,并且想知道该类是否明确地为其某些字段定义了默认值。

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

vs。

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

我可以实例化该类并获取其成员,但是我无法区分明确初始化的字段,例如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;可以编译但已损坏)。

1 个答案:

答案 0 :(得分:0)

来自 @Holger's comment:这是不可能的,即使有注释也是如此。