2017-01-13 4 views
1

In meinem Java 8-Code,Java Lambda Ausdruck Fehler

public ChangePersonsName(String email, final String password, final String wantedUsername, final String uuid, final long time, int latency, int[] requests, int[] proxyRequests) throws IOException { 
    final AtomicReference<Object> token = new AtomicReference<Object>(); 
    final AtomicReference<ArrayList<?>> newHeaders = new AtomicReference<ArrayList<?>>(); 
    new Thread(() -> { 
     boolean lock = true; 
     while (lock) { 
      if (time - System.currentTimeMillis() > 60000) continue; 
      Map<Header[], String> loginResults = null; 
      try { 
       loginResults = this.login(email, password, uuid); 
      } 
      catch (IOException e) { 
       e.printStackTrace(); 
      } 
      String token = loginResults.entrySet().iterator().next().getValue(); 
      Header[] headers = loginResults.entrySet().iterator().next().getKey(); 
      newHeaders.set(new ArrayList<Object>()); 
      for (Header header : headers) { 
       if (!header.toString().startsWith("Set-Cookie:")) continue; 
       ((List<BasicHeader>)newHeaders.get()).add(new BasicHeader("Cookie", header.toString().split("Set-Cookie: ")[1])); 
      } 
      lock = false; 
     } 
    } 
    ).start(); 
    new Timer().schedule(new TimerTask(){ 

Sie werden bemerken, dass

String token = loginResults.entrySet().iterator().next().getValue(); 

einen Compiler-Fehler führt,

Lambda Ausdruck der lokalen Variablen-Token kann nicht neu deklarieren eine andere lokale Variable, die in einem umschließenden Bereich definiert ist.

Meine Frage ist, wie würde man gehen, dies zu beheben? Ich bin ziemlich neu in Java, ich sollte wahrscheinlich wissen, wie das zu beheben ist, aber ich nicht.

+0

'final AtomicReference Token = new AtomicReference ();' Sie haben zwei Variablen mit dem gleichen Namen ('token'). Dies wird in der Nachricht _local Variable gesagt ** Token ** kann eine andere lokale Variable, die in einem umschließenden Scope definiert ist, nicht deklarieren. _ – AxelH

+2

* "Wie würde man das Problem lösen?" * Nennen Sie es etwas anderes. – Andreas

+1

Mögliches Duplikat von [Variable ist bereits in Methode Lambda definiert] (http://stackoverflow.com/questions/22773003/variable-is-ready-defined-in-method-lambda) – AxelH

Antwort

4

In diesem Bereich haben Sie bereits eine Variable mit dem Namen token. Du hast es in der 2. Reihe erklärt. Um dies zu beheben nur zweite Variable umbenennen:

String newToken = loginResults.entrySet().iterator().next().getValue();