Domanda

C'è un modo per me di passare le variabili in un ActionListener senza metterle in finale? Vorrei usare questi due punti all'interno qualche modo fasato ... ho provato Thread.sleep () ma per qualche motivo non maglia bene con il resto del programma. Questo è il formato Mi piacerebbe molto uso, ma sono consapevoli che potrebbe essere impossibile farlo funzionare. Sono aperto a qualsiasi e tutti i consigli. Grazie!

(Mi dispiace se questa è una domanda stupida, ho cercato una risposta, ma proprio non riesco a trovare uno.)

public void timedMain(Point current, Point wanted){
          ActionListener taskPerformer = new ActionListener(){
              public void actionPerformed(ActionEvent evt){
                  System.out.println(wanted+" "+current);}};
                  actiontimer = new Timer(delay, taskPerformer);
                  actiontimer.start();}
È stato utile?

Soluzione

Si potrebbe fare questo, che evita dichiarando i parametri come finale.

public void timedMain(Point current, Point wanted) {
      final Point c = current;
      final Point w = wanted;
      ActionListener taskPerformer = new ActionListener(){
          public void actionPerformed(ActionEvent evt){
              System.out.println(w + " " + c);}};
              actiontimer = new Timer(delay, taskPerformer);
              actiontimer.start();}

In alternativa, è possibile modificare il tipo di current e wanted in modo che fossero titolari Point mutevoli, e hanno l'aspetto metodo actionPerformed ai valori correnti nei supporti.

Ma non c'è modo di dichiarare la classe interna in modo da poter visualizzare le modifiche apportate ad una variabile in un metodo ambito racchiude ... se questo è ciò che si sta cercando di fare.

Altri suggerimenti

Si potrebbe fare un paio di cose

  • si potrebbe promuovere l'ascoltatore azione anonimo a un (private static) classe interna, e passare gli argomenti al costruttore

  • si potrebbe definire una funzione che ha costruito un listener di azione anonima, piuttosto che in linea nel vostro codice, e rendere i parametri che la funzione finale

Cosa c'è di sbagliato con appena marcatura loro 'finale', però?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top