Question

    

Cette question a déjà une réponse ici:

         

Je donne les résultats suivants:

Runnable done = new Runnable()
    {
        public void run()
        {
            System.out.println("Hello");
        }
    };

Et puis dans mon activité Android, je vais appeler quelque chose comme:

runOnUIThread(done);

Ce que je puis appeler. Cependant, je veux que "Hello" ne pas être codé en dur, donc je peux le transmettre. Sinon, je vais avoir une de ces déclarations pour chaque chaîne que je veux imprimer.

(Ceci est en fait une question android, mais aminci vers le bas à Java de base de sorte que son plus facile de répondre)

Merci

Était-ce utile?

La solution

final String hello = whereverItsComingFrom;
Runnable done = new Runnable()
    {
        public void run()
        {
            System.out.println(hello);
        }
    };

Autres conseils

En Java (et je crois qu'il est le même dans Android aussi), vous pouvez utiliser une classe interne anonyme, comme suggéré par Bart van Heukelom. Cette solution a l'avantage qui doivent écrire moins de code, et vous pouvez accéder aux champs et méthodes ouf la classe externe.

Mais il a 2 inconvénients:

  • la variable "bonjour" doit être finale,

  • la classe anonyme a une référence interne à l'instance de la classe externe - ce qui signifie l'être de la classe externe quand il serait conservé autrement admissible à la collecte des ordures. @See: Effective Java [Joshua Bloch], article 22: les classes membres de statique Faveur sur nonstatic

Et à mon humble avis, il est une mauvaise pratique paramètrer une instance de classe de cette façon.

Je crois, aussi longtemps que vous n'avez pas besoin de méthodes d'accès et les champs de la classe externe, il est préférable d'écrire une classe spécifique pour cette tâche et en faire un statique classe membre.

class Demo {
...

  private static class MyRunnable implements Runnable {
     private final String message;

     MyRunnable(final String message) {
       this.message = message;
     }

     public void run() {
       System.out.println(message);
     }
  }

  public void startThread() {
    MyRunnable myRunnable = new MyRunnable("Hello");

    runOnUIThread(myRunnable); 
  }
...
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top