Le piège que l'implémentation par défaut de l'interface Java 8 apporte

Arrêtons d'utiliser la version EOL ...

Cela fait un moment que j'ai implémenté Iterator, ce qui peut être la première fois. Lorsque je m'engage, il devient rouge dans Eclipse des autres pour une raison quelconque.

Java8Iterator.java


import java.util.Iterator;

public class Java8Iterator implements Iterator<Integer> {

	@Override
	public boolean hasNext() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Integer next() {
		// TODO Auto-generated method stub
		return null;
	}

}

Java7Iterator.java


import java.util.Iterator;

public class Java7Iterator implements Iterator<Integer> {

	@Override
	public boolean hasNext() {
		// TODO Auto-generated method stub
		return false;
	}

	@Override
	public Integer next() {
		// TODO Auto-generated method stub
		return null;
	}

	@Override
	public void remove() {
		// TODO Auto-generated method stub
		
	}

}

Pouvez-vous voir la différence? Java7Iterator a une méthode de suppression et Java8Iterator n'a pas de méthode de suppression. Il existe des environnements dans lesquels il n'y a pas de problème même s'il n'est pas implémenté, et il y a des environnements où des erreurs de compilation se produisent s'il n'est pas implémenté.

En regardant le chemin de construction Java du projet, il s'agit de "JRE System Library [Java SE-1.6]". N'était-ce même pas Java7!

image.png

Si les paramètres du projet sont Java 1.6 mais que jre 1.8.0 est utilisé, le code généré par "Ajouter des méthodes non implémentées" d'Eclipse n'inclut pas la méthode remove. Lorsque j'ai configuré le JRE compatible pour utiliser correctement jre 1.6, le code généré inclut désormais une méthode de suppression.

Si vous cochez src.zip de JDK8, l'implémentation par défaut est décrite dans l'interface Iterator. S'il existe une implémentation par défaut, elle ne sera pas traitée comme une méthode non implémentée.

C'est pourquoi vous devez soit enterrer une version EOL de Java, soit configurer un JRE étroitement compatible.

Recommended Posts

Le piège que l'implémentation par défaut de l'interface Java 8 apporte
Refactoriser l'implémentation du pattern Decorator avec une interface fonctionnelle
Commentaire: à propos de l'interface
Le piège que l'implémentation par défaut de l'interface Java 8 apporte
[Java] Interface fonctionnelle / expression lambda
Jusqu'à ce que le code soit exécuté
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
À propos de l'interface Java
À propos de l'interface, interface java
A propos de l'ordre de description des propriétés système Java
À propos de l'interface fonctionnelle Java
Commentaire: à propos de l'interface
À propos des données locales CLDR activées par défaut à partir de Java 9
Informations d'identification référencées par le kit AWS SDK for Java par défaut
Utilisez-vous correctement la méthode par défaut de l'interface?
À propos de la gestion de Null
À propos des instances Java
[Java] Le rapport de couverture n'a pas pu être créé en combinant la méthode par défaut de l'interface Cobertura +
À propos de la description de Docker-compose.yml
[Java] Implémentation du réseau Faistel
[Java] Simplifiez la mise en œuvre de la gestion de l'historique des données avec Reladomo
[Pour les débutants] À propos de la syntaxe JavaScript expliquée par Java Gold
À propos du fonctionnement de la session de lecture Java organisée chaque mois par BOF depuis 1998
Récapitulatif des valeurs renvoyées par la méthode des caractéristiques Spliterator #java
À propos du comportement par défaut de l'arrondi des fractions à l'aide de java.text.NumberFormat
Implémentation Java de tri-tree
Quand j'étais inquiet des méthodes statiques dans l'interface java, je suis arrivé à l'ordre d'interprétation des noms
Comment utiliser la fonction implémentée dans l'interface de Kotlin introduite dans Maven comme implémentation par défaut de Java 8
Parlons de l'expérience passagère de Java SE 8 Programmer II
Changer la version de java installée par SDKMAN lors du déplacement de répertoires
L'histoire de ne pas connaître le comportement de String en passant par Java
Une histoire sur l'utilisation de l'API League Of Legends avec JAVA
[Java] Introduction appropriée par Tenpa people Java Part 0 (règles du code)
À propos du comportement de ruby Hash # ==
Accéder à l'interface réseau avec Java
[Java] Supprimer les éléments de la liste
À propos des bases du développement Android
[Édition Java] Histoire de la sérialisation
À propos de Lambda, Stream, LocalDate de Java8
[Java débutant] À propos de l'abstraction et de l'interface
[Rails] À propos de la mise en œuvre de la fonction similaire
[Java] DateTimeFormatter sortie par FormatStyle
À propos de l'environnement de développement actuel (Java 8)
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
Implémentation par défaut de Object.equals () et Object.hashCode ()
L'origine des expressions Java lambda
Implémentation d'une fonction similaire en Java
À propos du niveau de journalisation de java.util.logging.Logger
À propos de la classification et du concept de Immutable / Mutable / Const / Variable de Java et Kotlin.
Ceci et cela de la mise en œuvre du jugement en temps réel des dates en Java
Vérifiez l'enregistrement MX de l'adresse e-mail avec java et vérifiez le domaine
Implémentation de la méthode de clonage pour Java Record
[Java Siler] À propos de l'inférence de type par var
Implémentation de DBlayer en Java (RDB, MySQL)
Obtenez le résultat de POST en Java
Importance de l'interface apprise de la collection Java
Devinez le cadre de persistance Java 2017 (3) Reladomo
Vérifiez le contenu du magasin de certificats Java
Examiner l'utilisation de la mémoire des éléments Java
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
[Java] Obtenez le jour d'un jour spécifique