2009-01-09 5 views
0

Ou, autrement dit, ce qui est mal avec quelque chose comme -Comment faire référence aux objets Méthode en Java?

new Method[] {Vector.add(), Vector.remove()} 

Eclipse continue à me dire que j'ai besoin des arguments. Mais je ne veux évidemment pas appeler les méthodes, je veux juste les utiliser comme des objets! Que faire?

+0

À moins que vous ayez besoin d'une synchronisation intégrée ArrayList serait un meilleur choix que Vector – OscarRyz

Répondre

6

cela fonctionne, je ne peux pas m'empêcher de me demander, ce que vous faites avec cela?

new Method[] { 
    Vector.class.getMethod("add", Object.class), 
    Vector.class.getMethod("remove", Object.class) 
}; 
+0

J'étais très confus de ce que la question était ...: S – OscarRyz

0

Tout d'abord, vous créez la syntaxe ici. Il n'y a pas de "Vector.add()" dans mes javadocs.

Vous pouvez le faire:


Method [] methods = Vector.class.getMethods(); 

mais vous ne pouvez pas exécuter ces méthodes. Pas de fermetures ou d'objets fonctionnels ici.

+0

En fait, les méthodes peuvent être exécutées. Aucune fermeture je suis d'accord. – OscarRyz

+0

Ah! C'est "invoquer". Je cherchais "exécuter" dans les javadocs et je ne l'ai pas vu. Merci pour la correction. – duffymo

+0

"No Vector.add()"? public booléen public add (E e) { @since 1.2, il est peut-être temps de mettre à jour votre machine virtuelle Java. :) – Cowan

0

qui fonctionne :)

J'utilise ce instancier un nombre variable de boucles « empilées » (boucle dans une boucle dans une boucle).

Il existe une méthode statique à laquelle vous transmettez l'index de départ, la limite, l'objet pour appeler les méthodes, et enfin un tableau de méthodes et un tableau d'arguments.

EDIT: Code approximatif - m'a pris 3 minutes pour écrire, donc il y a probablement quelque chose de très mauvais qui se cache là-dedans, mais l'idée générale est évidente, je pense.

public static void loop(int start, int lessThan, Object obj, Method[] methods, Object[] args) throws IllegalArgumentException, IllegalAccessException, InvocationTargetException { 
     lastLoop++; 
     for(int i = start; i < lessThan; i++) { 
      for(int j = 0; j < methods.length; j++) { 
       methods[j].invoke(obj, args[j]); 
      } 
     } 
    } 

Si vous vous demandez ce que j'utilise tout cela pour - je suis juste bricoler avec une façon de faire des permutations où le nombre d'éléments est inférieur au nombre de postes. J'ai rencontré des problèmes en essayant de définir un nombre variable de boucles (ce qui dépend du nombre de positions), alors j'ai décidé de le contourner avec ça.

+0

En Java, la manière idiomatique de passer une fonction en tant qu'objet est de définir une interface avec une méthode d'exécution, puis d'implémenter cette interface, souvent avec une classe anonyme. C'est plus clunkieur que les langages fonctionnels, mais c'est aussi typé, contrairement à votre méthode. –

+0

Voir par exemple Collections.max (Collection, Comparator). –

Questions connexes