Não compreendo estes dois comandos[RESOLVIDO]

2 respostas
kmunga

Estou lendo uma apostila de jogos p/android e me deparo com comandos que ainda não tinha utilizado e nem visto, gostaria de saber o conceito deles para poder entender a logica do metodo usado em questão.

Primeiramente o objeto do tipo Method, no que ele é responsavel? Segue abaixo o codigo para melhor entendimento.

Method method; try { method = GameScene.class.getMethod(hit, CCSprite.class, CCSprite.class); method.invoke(gameScene, array1.get(i), array2.get(j)); } catch (SecurityException e1) { e1.printStackTrace(); } catch (NoSuchMethodException e1) { e1.printStackTrace(); } catch (IllegalArgumentException e) { e.printStackTrace(); } catch (IllegalAccessException e) { e.printStackTrace(); } catch (InvocationTargetException e) { e.printStackTrace(); }

O segundo, trata-se aparentemente de uma chamada de metodo, porem a forma que foi feito não é comum para mim, reparem no chamamento das classes Shoot e Meteor.

public void meteoroHit(CCSprite meteor, CCSprite shoot) { ((Meteor) meteor).shooted(); ((Shoot) shoot).explode(); }

Obrigado

2 Respostas

E

Isso tudo é reflection (não vou ficar pedindo para você procurar [google]Java Reflection[/google] :slight_smile:

No primeiro trecho de código, você quer chamar o método da classe GameScene cujo nome é dado pelo conteúdo da variável hit (é uma variável string, não? ) e que tem 2 parâmetros de tipos CCSprite e CCSprite. Então ele precisa pegar uma referência para o método usando getMethod, e usar essa referência para chamar o método usando invoke.

method = GameScene.class.getMethod(hit,  
CCSprite.class, CCSprite.class);  
method.invoke(gameScene, array1.get(i),  
array2.get(j));

No segundo trecho de código, ele pegou um CCSprite meteor, e você sabe que esse CCSprite é do tipo Meteor, então ele fez um cast para Meteor (ou seja, ((Meteor) meteor) ) e então chamou o método “shooted”.

public void meteoroHit(CCSprite meteor, CCSprite shoot) {  
    ((Meteor) meteor).shooted();  
    ((Shoot) shoot).explode();  
    }

Aliás, esse tutorial foi escrito por alguém que não sabe inglês direito, certo? O verbo é “shoot (presente)” ou “shot” (passado). Não “shooted”.

kmunga

Eu não fazia ideia o que era Java Reflection hehehe vou estudar mais isso.

Sobre a segunda duvida, resolvida, era mais simples do que havia pensado.

Estou estudando através de um livro da casa do código, sim, eu reparei neste erro tambem, mas não muda muito a logica da coisa.

Obrigado por ajudar e quem tem duvida sobre Java Reflection recomento este artigo muito bem explicado http://www.devmedia.com.br/java-reflection-parte-i/4888

Criado 19 de julho de 2013
Ultima resposta 19 de jul. de 2013
Respostas 2
Participantes 2