Ich bin neu in Lambda-Ausdrücke in Java und ich bin nicht sicher, ob es zusätzlich schließen Scanner in dem Block, Lambda-Ausdrücke notwendig ist:Ist es notwendig, den Scanner innerhalb der Block Lambda Expressions zu schließen?
public interface factorialInterface {
int factorialMe (int n);
}
import java.util.Scanner;
public class factorialDemo {
public static void main(String args[]) {
Scanner keyb = new Scanner (System.in);
factorialInterface fact = (n) -> {
int result = 1;
for (int i = 1; i <= n; i++) {
result = i * result;
}
keyb.close(); // <- not sure about this one.
return result;
};
System.out.print("Pass value: ");
System.out.println(fact.factorialMe(keyb.nextInt()));
System.out.println();
keyb.close();
}
}
Wenn ich nicht schließen ‚Tast‘ diese innen Block Eclipse wird mich über das Ressourcenleck informieren. Ist es immer empfehlenswert, den Scanner innerhalb des Lambda Blocks zu schließen? Danke für Hilfe!
Sind Sie sicher, dass Sie 'System.in' schließen möchten? – bradimus
Ich würde sagen, Eclipse ist falsch daran. Es gibt keinen Grund dafür, dass Ihr Lambda etwas mit dem Scanner zu tun hat. – njzk2
Schließen Sie immer einen 'Scanner', außer * einen' Scanner' auf 'System.in'. Sie sollten 'System.in' niemals schließen. Eclipse hat diese Ausnahme nicht, also müssen Sie es sagen, indem Sie '@SuppressWarnings (" resource ")' in die Zeile direkt vor 'Scanner keyb = ...' einfügen. – Andreas