J'essaie de traiter les références de méthode Java8 et j'ai rencontré une erreur de compilation très étrange.Java8 Méthode Référence et génériques, cast de type requis dans certains cas
J'ai eu une carte avec des valeurs d'objet et je veux permettre à l'utilisateur d'appliquer certaines fonctions sur les valeurs.
J'utilise la méthode générique qui prend la clé de carte et une interface fonctionnelle en tant que paramètre
Et je me demande pourquoi je ne ai pas besoin de jeter référence Méthode type réel précis (en cas de garniture)
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)));
}
}
}
Résultat:
{key1 = texte avec l'espace en début, key2 = aaaaaaaaaaaaaa} {key1 = un peu texte wi e espace début, key2 = aaaaaaaaaaaaaa}
Vous avez oublié de mentionner que vous avez erreur de compilation exactement. Cela pourrait avoir à voir avec le fait que 'toLowerCase' a deux surcharges, mais nous ne pouvons pas le dire sans l'erreur. S'il vous plaît [modifier] votre question et l'inclure. – RealSkeptic
Ajouté en code. Cela semble étrange pour moi pourquoi il pourrait résoudre la méthode après le lancement s'il y en a 2 – Limmy
Cette erreur de compilation donne l'impression que la théorie de @ RealSkeptic sur les surcharges est probablement correcte: https://ideone.com/I1Y7Am – Radiodef