我正在通过自省来解析类定义,并且想知道该类是否明确地为其某些字段定义了默认值。
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;
可以编译但已损坏)。