2012-03-01 3 views
2

J'ai essayé de trouver un moyen d'intégrer quelque chose de similaire à Closure in Java 1.6 depuis que je développe pour Android. Ce que je veux (dans un monde parfait) J'ai une classe, nous l'appellerons "Item".Fermeture en Java ou quelque chose comme ça

J'ai alors un arrayList de ceux-ci.

ArrayList<Item> items = new ArrayList<item>; 

Dans chacun d'eux items.get (x) Je veux enregistrer un bloc de code qui sera exécuté lorsqu'il est appelé. Ce bloc de code doit avoir lieu dans la portée de la classe contenant les éléments ArrayList. Ma seule idée, à moitié imagée, serait de créer les méthodes de la classe qui abritent les «items» et de sauvegarder le nom de la fonction dans chacune des instances «item», puis d'utiliser la réflexion pour appeler ces méthodes. Je suis assez douteux que cela pourrait être possible, mais c'est l'endroit où je trouverai une réponse de toute façon.

Merci d'avance pour toute aide.

+1

Ce n'est pas une réponse, mais vous voudrez peut-être avoir une lecture à travers [l'article de Jon Skeet] (http://csharpindepth.com/articles/chapter5/closures.aspx), il couvre aussi Java (avant Java 7). –

Répondre

9

Qu'est-ce que vous avez besoin est une interface comme

interface Closure{ 
    public void exec(); 
} 

et créer une classe anonyme pour chaque code « de fermeture » vous voulez

Closure closure = new Closure() { 
    public void exec(){ 
     // code here 
    } 
} 
+0

hmmm, j'essaie de voir comment cela va fonctionner, je pense que je suis un peu lent cependant. Donc dans ma classe Items je définirais la classe anonyme? Cela ne limiterait-il pas la portée à cette seule occurrence d'élément? – JoeyG

+0

um, si vous voulez définir la classe anonyme dans 'Item', alors vous pouvez changer la signature' exec' pour accepter les entrées et appeler 'exec' avec tout ce que vous voulez passer. – Chikei

+0

Eh bien, il y a le problème pour moi, je veux que ces blocs de code puissent accéder aux variables qui sont dans la classe qui contient le tableau Liste. J'ai donc besoin que le code soit appelé défini dans cette classe de logement, mais sauvegardé dans la classe d'objet. J'ai l'impression de trop demander. haha – JoeyG

Questions connexes