使用forloop(Java)迭代List <string>

时间:2017-04-28 23:25:26

标签: java

我试图迭代一个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
}

1 个答案:

答案 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;