Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt

Hören wir auf, die EOL-Version zu verwenden ...

Es ist schon eine Weile her, dass ich Iterator implementiert habe, was vielleicht das erste Mal ist. Wenn ich mich verpflichte, wird es in der Eclipse anderer Leute aus irgendeinem Grund rot.

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
		
	}

}

Kannst du den Unterschied sehen? Java7Iterator verfügt über eine Methode zum Entfernen, und Java8Iterator verfügt nicht über eine Methode zum Entfernen. Es gibt Umgebungen, in denen es kein Problem gibt, auch wenn es nicht implementiert ist, und es gibt Umgebungen, in denen Kompilierungsfehler auftreten, wenn es nicht implementiert ist.

Der Java-Erstellungspfad des Projekts lautet "JRE-Systembibliothek [Java SE-1.6]". War es nicht einmal Java7?

image.png

Wenn die Projekteinstellungen Java 1.6 sind, aber jre 1.8.0 verwendet wird, enthält der von Eclipse generierte Code "Add nicht implementierte Methoden" nicht die Methode remove. Wenn ich die kompatible JRE für die ordnungsgemäße Verwendung von jre 1.6 konfiguriert habe, enthält der generierte Code jetzt eine Entfernungsmethode.

Wenn Sie src.zip von JDK8 überprüfen, wird die Standardimplementierung in der Iterator-Schnittstelle beschrieben. Wenn es eine Standardimplementierung gibt, wird diese nicht als nicht implementierte Methode behandelt.

Aus diesem Grund sollten Sie entweder eine EOL-Version von Java begraben oder eine eng kompatible JRE einrichten.

Recommended Posts

Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt
Refactor die Implementierung des Decorator-Musters mit einer funktionalen Schnittstelle
Kommentar: Über die Schnittstelle
Die Falle, die die Standardimplementierung der Java 8-Schnittstelle mit sich bringt
[Java] Funktionsschnittstelle / Lambda-Ausdruck
Bis der Code ausgeführt wird
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Über die Java-Schnittstelle
Über Schnittstelle, Java-Schnittstelle
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
Informationen zur Java-Funktionsschnittstelle
Kommentar: Über die Schnittstelle
Informationen zu CLDR-Gebietsschemadaten, die standardmäßig in Java 9 aktiviert sind
Anmeldeinformationen, auf die das AWS SDK für Java standardmäßig verweist
Verwenden Sie die Standardmethode der Schnittstelle ordnungsgemäß?
Über den Umgang mit Null
Über Java-Instanzen
[Java] Der Abdeckungsbericht konnte nicht durch Kombinieren der Standardmethode der Cobertura + -Schnittstelle erstellt werden
Informationen zur Beschreibung von Docker-compose.yml
[Java] Implementierung des Faistel-Netzwerks
[Java] Vereinfachen Sie die Implementierung der Datenverlaufsverwaltung mit Reladomo
[Für Anfänger] Über die von Java Gold erklärte JavaScript-Syntax
Über den Betrieb der Java-Lesesitzung BOF findet seit 1998 monatlich statt
Zusammenfassung der von der Spliterator-Merkmalsmethode #java zurückgegebenen Werte
Informationen zum Standardverhalten der Bruchrundung mit java.text.NumberFormat
Java-Implementierung von Tri-Tree
Als ich mir Sorgen über statische Methoden in der Java-Oberfläche machte, kam ich zur Reihenfolge der Namensinterpretation
Verwendung der in Kotlins Schnittstelle implementierten Funktion, die in Maven als Standardimplementierung von Java 8 eingeführt wurde
Lassen Sie uns über die vorübergehende Erfahrung von Java SE 8 Programmer II sprechen
Wechseln Sie die von SDKMAN installierte Java-Version, wenn Sie Verzeichnisse verschieben
Die Geschichte, das Verhalten von String durch Passieren von Java nicht zu kennen
Eine Geschichte über das Erreichen der League Of Legends-API mit JAVA
[Java] Angemessene Einführung durch Tenpa-Leute Java Teil 0 (Code-Regeln)
Über das Verhalten von Ruby Hash # ==
Greifen Sie mit Java auf die Netzwerkschnittstelle zu
[Java] Löschen Sie die Elemente von List
Über die Grundlagen der Android-Entwicklung
[Java Edition] Geschichte der Serialisierung
Über Lambda, Stream, LocalDate von Java8
[Java-Anfänger] Über Abstraktion und Schnittstelle
[Rails] Über die Implementierung der Like-Funktion
[Java] Ausgabe von DateTimeFormatter durch FormatStyle
Informationen zur aktuellen Entwicklungsumgebung (Java 8)
Informationen zur Rolle der Initialisierungsmethode
Denken Sie an die 7 Regeln von Optional
Standardimplementierung von Object.equals () und Object.hashCode ()
Der Ursprung von Java-Lambda-Ausdrücken
Implementierung einer ähnlichen Funktion in Java
Informationen zur Protokollebene von java.util.logging.Logger
Über die Klassifizierung und das Konzept von Immutable / Mutable / Const / Variable von Java und Kotlin.
Dies und das der Implementierung der zeitlichen Beurteilung von Daten in Java
Überprüfen Sie den MX-Eintrag der E-Mail-Adresse mit Java und die Domain
Implementierung der Klonmethode für Java Record
[Java Siler] Informationen zur Typinferenz von var
Implementierung von DBlayer in Java (RDB, MySQL)
Holen Sie sich das Ergebnis von POST in Java
Bedeutung der aus der Java Collection gelernten Schnittstelle
Erraten Sie das Java Persistence Framework 2017 (3) Reladomo
Überprüfen Sie den Inhalt des Java-Zertifikatspeichers
Untersuchen Sie die Speichernutzung von Java-Elementen
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
[Java] Ermittelt den Tag eines bestimmten Tages