0

我正在使用 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 默认值。

谢谢

4

0 回答 0