2013-02-06 88 views
-1

你好,我在這段代碼中有問題,它真的困擾我,因爲我不知道如何解決它,如果你們可以幫助我,那麼這將是偉大的!Java:類型不匹配不能從元素類型Object轉換爲MethodNode

public void execute(final String name, final ClassNode cn) { 
    Updater.getInstance().getClasses().set("Animable", cn); 
    addProcessor(new AddInterfaceProcessor(this, cn.name, ACCESSOR_DESC + "Animable")); 
    for (final MethodNode mn : cn.methods) { 
     if ((mn.access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_STATIC | Opcodes.ACC_NATIVE)) != 0 || !mn.desc.equals("()Z")) { 
      continue; 
     } 
     final RIS ris = new RIS(mn); 
     FieldInsnNode fin; 
     for (int i = 0; i < 4; i++) { 
      if ((fin = ris.next(FieldInsnNode.class, Opcodes.GETFIELD)) == null) { 
       continue; 
      } 
      addProcessor(new AddGetterProcessor(this, "get" + ((i & 1) != 0 ? "Max" : "Min") + (char) (Math.max(0, Math.min(1, i - 1)) + 88), fin.desc, cn.name, fin.name, fin.desc, false)); 
     } 
     break; 
    } 
} 

而且問題是這部分:

for (final MethodNode mn : cn.methods) { 
     if ((mn.access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_STATIC | Opcodes.ACC_NATIVE)) != 0 || !mn.desc.equals("()Z")) { 
      continue; 
     } 

如何解決呢?

+1

'c.methods'返回什麼? – Abubakkar

+0

你使用的是什麼版本的ASM? – Perception

回答

1

類型的cn.methods必須是Object[]Iterable<Object>

你將不得不使用:

for (final Object obj : cn.methods) { 
    MethodNode mn = (MethodNode)obj; 

或修復的cn.methods類型更具體。

+0

謝謝!有效。 – Frunk

0
Objects mn and cn needs to be Initialized before u use in . 

for (final MethodNode mn : cn.methods) { 
     if ((mn.access & (Opcodes.ACC_ABSTRACT | Opcodes.ACC_STATIC | Opcodes.ACC_NATIVE)) != 0 || !mn.desc.equals("()Z")) { 
      continue; 
     } 
相關問題