迭代AttributeSet枚举

时间:2011-05-25 14:16:24

标签: java enumeration

我有以下代码:

    private static boolean hasTargetStyle(AttributeSet attributes) {
        final Enumeration<?> attributeNames = attributes.getAttributeNames();
        while (attributeNames.hasMoreElements()) {
            final Object attributeName = attributeNames.nextElement();
            if (attributeName.equals(MY_STYLE_NAME)) {
                return true;
            }
        }

        return false;
    }

现在我认为这段代码会遍历每个属性名称。但它只给了我所有其他属性名称(具有偶数索引的属性名称)。

这里出了什么问题?

4 个答案:

答案 0 :(得分:1)

我认为它没有索引 - Set没有索引。代码看起来很好。除非getAttributeNames()返回错误的实现枚举,否则它应该有效。

答案 1 :(得分:1)

我目前看不到您的代码有任何问题,但请尝试使用Collections.list

private static boolean hasTargetStyle(AttributeSet attributes) {
    final List<?> attributeNames = Collections.list(attributes.getAttributeNames());

    for(Object name: attributeNames){
        if(name.equals(MY_STYLE_NAME)){
            return true;
        }
    }

    return false;
}

答案 2 :(得分:1)

我怀疑这是java.util.Enumeration的问题(虽然这只是一个界面而实际的实现可能有一个错误)。你的实现对我来说很好。

其他想法:初始AttributeSet可能只包含其他所有属性。尝试设置断点并查看实际属性集的内部。

答案 3 :(得分:0)

我在调试器中查看的内部列表中的名称和值都是交替的。所以,我的代码在某种意义上是正确的,但我的意图是错误的。