Java-Dokument von Java anzeigen Optional

Was

public Optional<T> filter(Predicate<? super T> predicate) --filter verwendet ein Prädikat mit einer Implementierung von "boolean test (T t)" als Argument --predicate empfängt eine Instanz vom Typ T und gibt die Authentizität zurück. Zu diesem Zeitpunkt kann anstelle von T die obere Klasse von T für das Urteil verwendet werden.

public T orElseGet(Supplier<? extends T> other) --orElseGet verwendet einen Lieferanten mit einer Implementierung von "T get ()" als Argument --other gibt eine Instanz vom Typ T zurück. Zu diesem Zeitpunkt kann es sich um eine niedrigere Klasse von T anstelle von T handeln.

public void ifPresent(Consumer<? super T> consumer) --ifPresent nimmt einen Verbraucher mit einer Implementierung von "void accept (T t)" als Argument

public <U> Optional<U> map(Function<? super T,? extends U> mapper) --map verwendet eine Funktion mit der Implementierung von "U apply (T t)" als Argument --mapper verwendet eine Instanz vom Typ T als Argument und gibt eine Instanz vom Typ U zurück. Zu diesem Zeitpunkt kann die obere Klasse von T anstelle von T verwendet werden, und die untere Klasse von U kann anstelle von U verwendet werden. --mapper konvertiert von T (oder höher) nach U (oder niedriger)

public <U> Optional<U> flatMap(Function<? super T,Optional<U>> mapper) --flatMap verwendet eine Funktion mit der Implementierung von "U apply (T t)" als Argument --mapper verwendet eine Instanz vom Typ T als Argument und gibt einen optionalen Typ \ zurück. Zu diesem Zeitpunkt kann die obere Klasse von T anstelle von T verwendet werden.

  • Zu diesem Zeitpunkt ist Optional \ nicht Optional \ <? Erweitert U> (dies ist ein Problem) --Zusatz) In den Kommentaren wurde mir mitgeteilt, dass Java 9 in Optional \ <? Extends U> geändert wurde.
Function<Integer, Optional<SpaceDog>> myConverter = new Function<Integer, Optional<SpaceDog>>() {
    @Override
    public Optional<SpaceDog> apply(Integer t) {
        SpaceDog d = new SpaceDog();
        d.age = t;
        return Optional.of(d);
    }
};

//Kompilierungsfehler in Java8, OK in Java9
Optional<Dog> optDog = optInt.flatMap(myConverter);

public T orElse(T other) --orElse verwendet eine Instanz vom Typ T als Argument ――Ist das auch ohne Grenztypparameter so? ――Ist es in Ordnung, weil es als Subtyp verwendet werden kann, wenn es kein generischer Typ ist?

	Optional<Dog> opt = Optional.of(new Dog());
	Dog d = opt.orElse(new SpaceDog());

--Zusatz) Für das Problem, dass orElse nicht mit dem Grenztypparameter Optional verwendet werden kann, den ich im Kommentar erhalten habe, habe ich mir einen Verbesserungsplan ausgedacht, wenn Optional eine solche statische Methode hatte.


	/**
	 *Eine Methode zum Aktivieren von Optional orElse mit optionalen Variablen von Grenztypparametern
	 * 
	 * @Hersteller von param optT T.(Kann eine niedrigere Klasse von T produzieren)
	 * @param anderer U-Typ mit der Einschränkung "T oder eine Unterklasse von T"
	 * @return Return als T-Typ
	 */
	static <T, U extends T> T orElseEx(Optional<? extends T> optT, U other) { 
		if(optT.isPresent()) {
			return optT.get();
		}
		return other;
	}

//Anwendungsbeispiel
Optional<? extends Number> optNum = Optional.empty();
Number num2 = MyOptional.orElseEx(optNum, 0.5);
System.out.println(num2); //0.5

Recommended Posts