我有以下代码:
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;
}
现在我认为这段代码会遍历每个属性名称。但它只给了我所有其他属性名称(具有偶数索引的属性名称)。
这里出了什么问题?
答案 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)
我在调试器中查看的内部列表中的名称和值都是交替的。所以,我的代码在某种意义上是正确的,但我的意图是错误的。