Dans Java 10, il est possible de déclarer des variables par inférence de type appelée var. Par exemple var url = new URL("http://ukiuni.com"); Ce faisant, url est déduite de type et devient une variable de type URL.
Jusqu'à ce point, l'histoire se termine par "Hé. C'est un sucre de syntaxe qui peut omettre la description des variables." Cependant, dans l'inférence de type Java 10, "des types inexprimables peuvent également être déduits." Je vais.
.. .. .. Je ne sais pas de quoi vous parlez, mais je ne sais pas non plus de quoi vous parlez.
Voici l exemple de code.
Sample.java
public class Sample{
public static void main(String[] args) {
var ins = (Foo & Bar) ()->{};
ins.foo();
ins.bar();
ins.forFunctionalInterfaceMethod(); //☓ Vous pouvez l'appeler sans l'implémenter → Corrigé en recevant des commentaires. 3 lignes ci-dessus()->{}Est implémenté.
ins.toString(); //C'est également un type d'objet.
}
interface Base {
void forFunctionalInterfaceMethod();
}
interface Foo extends Base {
default void foo() {
System.out.println("foo");
}
}
interface Bar extends Base {
default void bar() {
System.out.println("bar");
}
}
}
Quand ceci est compilé et exécuté dans Java 10, la sortie ressemble à ceci.
$ javac Sample.java && java Sample
foo
bar
En d'autres termes var ins = (Foo & Bar) ()->{}; Ins est un type Foo, un type Bar, un type Base qui est le parent de l'interface et un type Object. C'est le type d'intersection, qui est un "type inexprimable". Vous pouvez maintenant faire quelque chose comme Mixin dynamique.
.. .. .. Dans quels cas peut-il être utilisé de manière pratique? .. .. Si vous avez des idées, veuillez commenter.
Recommended Posts