Je suis un peu confus avec le comportement différent d'une classe anonyme et d'une expression lambda.Valeur de "this" dans une classe anonyme vs une expression lambda
Lorsque j'utilise une expression lambda:
//Test.java
Runnable r1 =() -> System.out.println(this);
Runnable r2 =() -> System.out.println(toString());
@Override
public String toString() {
return "Hello World!";
}
// in main method
new Test().r1.run();
new Test().r2.run();
Output : Hello World!
Hello World!
Lorsque vous utilisez une classe anonyme:
Runnable r1 = new Runnable() {
@Override
public void run() {
System.out.println(this);
}
};
Runnable r2 = new Runnable() {
@Override
public void run() {
System.out.println(toString());
}
};
@Override
public String toString() {
return "Hello World!";
}
// in main method
new Test().r1.run();
new Test().r2.run();
Output : [email protected]
[email protected]
Quelqu'un peut-il expliquer s'il vous plaît le comportement différent?
Merci pour la réponse :), mais ce qui est lié lexicalement? –
@MehrajMalik Cela signifie qu'ils sont liés au moment de la compilation en fonction du contexte dans lequel ils ont été trouvés. – 4castle
Cela n'affecte pas seulement 'this' et' super'. A l'intérieur d'une classe interne anonyme, il peut y avoir des membres hérités (pas seulement 'toString()') alors qu'une expression lambda n'hérite rien de l'interface fonctionnelle. – Holger