Ich versuche, mit Java8 Methodenreferenzen zu behandeln und stieß auf sehr seltsame Kompilierungsfehler.Java8 Method Reference und Generics, Typ Cast in einigen Fällen erforderlich
Ich hatte eine Karte mit Objektwerten und ich möchte für den Benutzer einige Funktionen auf Werte anwenden.
So habe ich generische Methode, die Mapkey und funktionale Schnittstelle als Parameter
Und ich, warum ich Referenzmethode brauchen nicht frage mich braucht, um präzise Echt Art zu werfen (bei trim)
import java.util.HashMap;
import java.util.Map;
import java.util.function.UnaryOperator;
public class ReferenceDiscovering {
Map<String, Object> values = new HashMap<>();
public static void main(String[] args) {
ReferenceDiscovering main = new ReferenceDiscovering();
main.values.put("key1", " some text with space in start");
main.values.put("key2", "AAAAAAAAAAAAAA");
System.out.println(main.values);
main.applyFunctionByKey("key1", String::trim);
// cannot resolve method toLowerCase
// COMPILE ERROR HERE. WHY???? WHY NOT FOR trim?
// main.applyFunctionByKey("key2", String::toLowerCase);
main.applyFunctionByKey("key2", (UnaryOperator<String>)String::toLowerCase);
System.out.println(main.values);
}
private <T> void applyFunctionByKey(String key, UnaryOperator<T> binaryOperator) {
if (values.containsKey(key)) {
values.put(key, binaryOperator.apply((T)values.get(key)));
}
}
}
Ergebnis:
{key1 = etwas Text mit Platz in Start, key2 = AAAAAAAAAAAAAA} {key1 = some Text wi ten Platz in Start, key2 = AAAAAAAAAAAAAA}
Sie vergessen zu erwähnen, welche kompilieren Fehler Sie genau einsehen. Es könnte damit zu tun haben, dass toLowerCase zwei Überladungen hat, aber ohne den Fehler können wir nicht sagen. Bitte [bearbeiten] Sie Ihre Frage und fügen Sie sie hinzu. – RealSkeptic
Hinzugefügt in Code. Es scheint für mich seltsam, warum es Methode nach dem Gießen auflösen könnte, wenn es 2 von ihnen gibt – Limmy
Dieser Kompilierungsfehler macht es klingt wie @ RealSkeptic Theorie über Überladungen ist wahrscheinlich richtig: https://ideone.com/I1Y7Am – Radiodef