Le type d'intersection introduit dans Java 10 est incroyable (?)

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

Le type d'intersection introduit dans Java 10 est incroyable (?)
Quelle est la méthode principale en Java?
Détermination de type en Java
Mémo organisé dans la tête (Java - type de données)
[Java] Quelque chose est affiché comme "-0.0" dans la sortie
Quel est le meilleur, Kotlin ou futur Java?
L'histoire que .java est également construite dans Unity 2018
Essayez le type fonctionnel en Java! ①
5ème jour de Java
[Java] "T" est inclus dans le type de date JSON dans la réponse de l'API
Accéder à l'interface réseau avec Java
Devinez le code de caractère en Java
Spécifiez l'emplacement Java dans eclipse.ini
Où est le fuseau horaire de Java LocalDateTime.now ()?
Décompressez le fichier zip en Java
Analyser l'analyse syntaxique de l'API COTOHA en Java
Appelez la super méthode en Java
Ceci est la sortie Excel en Java! Traduction de documents officiels "JXLS"
La milliseconde définie dans /lib/calendars.properties de Java jre est UTC
[Android / Java] Comprendre le type de description dans les paramètres d'écoute (installation du bouton)
Qu'est-ce qu'une classe en langage Java (3 /?)
Obtenez le résultat de POST en Java
Concernant la comparaison d'équivalence de type de chaîne en Java
Spring Autowired est écrit dans le constructeur
[Explication facile à comprendre! ] Conversion de type de type de référence en Java
[Java] Afficher la chaîne de bits stockée dans la variable de type d'octet sur la console
Référence Java à comprendre dans la figure
Quel est le meilleur type de données de migration? ??
Essayez d'utiliser l'API Stream en Java
Appelez l'API de notification Windows en Java
[Note personnelle] Le type de données Java est ennuyeux
J'ai essayé le nouveau yuan à Java
[Java] Présentation du type générique de limite générique
Mémo: [Java] Si un fichier se trouve dans le répertoire surveillé, traitez-le.
[Java] Utiliser la technologie cryptographique avec les bibliothèques standard
Organisation des notes dans la tête (Java-Arrangement)
Quelle est la meilleure lecture de fichier (Java)
Qu'est-ce qu'une classe en langage Java (1 /?)
Essayez d'appeler le service CORBA sur Java 11+
[Java] Rédiger un quiz de programmation SET INTERSECTION avec StreamAPI en une seule ligne
Qu'est-ce qu'une classe en langage Java (2 /?)
L'API de sécurité Java EE est là!
Raison pour ajouter L au nombre à mettre en type long Java
Comment obtenir la date avec Java
L'histoire de l'écriture de Java dans Emacs
Entrée de la console en Java (comprendre le mécanisme)
Qu'est-ce que CHECKSTYLE: OFF trouvé dans la source Java? Checkstyle à savoir de
[Java] Différence entre equals et == dans une chaîne de caractères qui est un type de référence
[Java] Où est la classe d'implémentation de l'annotation qui existe dans BeanValidation?
À propos de la signification des variables de type, E, T, etc. utilisées dans les génériques utilisés en Java
[Java] Est-il inutile de vérifier "l'identité" dans l'implémentation de la méthode equals ()?
Que trouve-t-on ... (3 points) dans la source Java? Argument de longueur variable à connaître
Concernant les modificateurs transitoires et la sérialisation en Java
[Java] Gestion des Java Beans dans la chaîne de méthodes
À propos de la confusion observée dans les serveurs Java de démarrage
L'histoire de la fabrication d'un Othello ordinaire à Java
À propos de l'idée des classes anonymes en Java
Une histoire sur le JDK à l'ère de Java 11