Estoy tratando de iterar una Lista. Estoy trabajando con ASM, y generalmente uso
for(MethodNode methodNode:(List<MethodNode>) classNode.methods){ //... }para iterar mis listas.
pero cuando trato de iterar una lista de cadenas
for(String interfaceName:(List<String>) classNode.interfaces){ //... }mi IDE me da el error "Solo se puede iterar sobre una matriz o una instancia de java.lang.Iterable".
@Params classNode.interfaces devuelve una List <String> ( http://asm.ow2.org/asm50/javadoc/user/org/objectweb/asm/tree/ClassNode.html#interfaces )
Editar: ¡Lo descubrí! Para aquellos que se preguntaban qué hice, pensé que lo publicaría.
for(Object strName: classNode.interfaces){ //use String.valueOf(strName) to obtain type string }Esto sucede porque, por las razones que sean, la distribución binaria de asm viene con un contenedor despojado de metadatos de firmas genéricas. Para fines de desarrollo, debe agregar asm-debug-all-5.2.jar a su classpath, luego su IDE no se quejará de usted y no tendrá que hacer cadenas de cosas que ya son cadenas. Aquí está la diferencia consultada de cada archivo con 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;