我试图迭代一个List。我正在使用ASM,通常我使用
for(MethodNode methodNode:(List<MethodNode>) classNode.methods){
//...
}
迭代我的名单。
但是当我尝试迭代字符串List
时for(String interfaceName:(List<String>) classNode.interfaces){
//...
}
我的IDE给了我&#34;只能遍历数组或java.lang.Iterable&#34;的实例。错误。
@Params classNode.interfaces返回List <String>
(http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/tree/ClassNode.html#interfaces)
编辑: 我想到了!对于那些想知道我做了什么的人,我想我发布了它!
for(Object strName: classNode.interfaces){
//use String.valueOf(strName) to obtain type string
}
答案 0 :(得分:0)
发生这种情况是因为无论出于何种原因,asm二进制分发都附带了一个剥去通用签名元数据的jar。出于开发目的,您应该将asm-debug-all-5.2.jar
添加到类路径中,然后您的IDE不会抱怨您,并且您不必使用已经是字符串的内容来创建字符串。以下是使用javap
➤ javap -cp asm-all-5.2.jar org.objectweb.asm.tree.ClassNode | grep interfaces
public java.util.List interfaces;
➤ javap -cp asm-debug-all-5.2.jar org.objectweb.asm.tree.ClassNode | grep interfaces
public java.util.List<java.lang.String> interfaces;