1
В моей Java 8 код,Java Lambda выражение ошибки
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();
вызывает ошибку компиляции,
локальная переменная лексемаLambda Экспрессия может не переобъявить другая локальная переменная, определенная в охватывающей области.
Мой вопрос: как можно было бы это исправить? Я довольно новичок в Java, я, наверное, должен знать, как это исправить, но я этого не делаю.
'окончательный AtomicReference
* «Как бы это исправить?» * Назовите это чем-то другим. – Andreas
Возможный дубликат [variable уже определен в методе lambda] (http://stackoverflow.com/questions/22773003/variable-is-already-defined-in-method-lambda) – AxelH