我正在使用 BND 注释来帮助创建由 OSGI cm 管理的配置。
这是我的简单配置
@Meta.AD(required = false, type = Type.Boolean, deflt = "false")
boolean enabled();
我已经多次使用 BND 配置注释库,但这是我第一次想使用布尔类型。
我已经阅读了这个
为了方便起见,它讨论了基于整数或其他替代数字的布尔值处理。问题是 deflt 方法总是返回一个字符串值,如果我的类型是一个整数,我会做“2”(这些被解析)。但是直到这个分配点,布尔值似乎没有在可配置的 BND 代码中被解析。
if (resultType == boolean.class || resultType == Boolean.class) {
if ( actualType == boolean.class || actualType == Boolean.class)
return o;
if (Number.class.isAssignableFrom(actualType)) {
double b = ((Number) o).doubleValue();
if (b == 0)
return false;
else
return true;
}
return true;
我想进一步知道为什么当 deflt 值甚至从未被解析时返回 true。我希望这会更严格地遵循规范并返回 false,因为 cm 会尝试执行 Boolean.parseFrom,所以任何不“真”等于忽略大小写的东西都是假的。
所有这一切都不是完全失败,因为如果我通过 cm 更改值,它会在设置为 true 后正常工作,然后再次设置为 false,但显然这只是想知道它是否会起作用。
只是我想知道是否有人知道如何使用 BND 的配置注释设置 BOOLEAN 默认值。
谢谢