获取字段初始化值
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;
可以编译但已损坏)。
来自:这是不可能的,即使有注释。
我正在通过内省解析 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;
可以编译但已损坏)。
来自