2017-01-13 18 views
1

Javaのラムダ式のエラー

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(){ 

あなたは

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

は、コンパイルエラーをスローし、

ラムダ式のローカル変数トークンが再宣言できないことに気づくでしょう囲みスコープで定義された別のローカル変数。

私の質問は、これを修正するにはどうすればいいですか?私はかなりJavaに新しい、私はおそらくこれを修正する方法を知っている必要がありますが、私はしません。

+0

'最終AtomicReference トークン=新しいAtomicReference (:ちょうど第二変数の名前を変更修正します。これは_local変数**のトークンに書かれています**トークン**は、囲みスコープで定義された別のローカル変数を再宣言できません。 – AxelH

+2

* "これを修正するにはどうすればいいですか? – Andreas

+1

[変数は既にメソッドλで定義されています](http://stackoverflow.com/questions/22773003/variable-is-already-defined-in-method-lambda) – AxelH

答えて

4

この範囲には、すでに名前がtokenの変数があります。 2列目に宣言しました。あなたは、同じ名前( `token`)を持つ2つの変数を持っている`;)

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