J'essaie de créer une méthode qui place les résultats d'une fonction dans un consommateur en utilisant des références non liées (je pense). Voici le scénario. Avec ResultSet de JDBC, vous pouvez obtenir des valeurs de ligne par index. J'ai une instance de Bean dans laquelle je veux placer les valeurs sélectionnées. Je cherche un moyen d'éviter l'écriture du code de la cartographie de la plaque de la chaudière, mais plutôt obtenir quelque chose comme:Lutte de syntaxe de référence Java 8 non liée
static <T> void copy(Consumer<T> setter, Function<T, Integer> getter, Integer i);
Et appelez comme:
copy(Bean::setAValue, ResultSet::getString, 0)
Je ne veux pas la liaison Bean
et ResultSet
à par exemple trop tôt puisque je veux que ce soit utilisable avec n'importe quel bean de ResultSet
.
L'exemple que j'ai essayé de travailler à partir est:
public static <T> void println(Function<T,String> function, T value) {
System.out.println(function.apply(value));
}
Appelée via:
println(Object::toString, 0L);
Et quel est le problème avec 'bean.setAValue (rs.getString (0))'? Comment votre code est-il supérieur à celui-là? Btw, quel est exactement votre problème? – Seelenvirtuose
Vous ne pourrez pas utiliser 'Consumer' ou' Function' - ces méthodes de déclaration d'interface qui n'acceptent qu'un seul argument. Vous avez besoin de quelque chose qui accepte deux arguments (dans le cas de 'Bean :: setValue' - l'un représentant' Bean', l'autre représentant 'T'). –
On ne sait pas où vous avez des difficultés. Vous pouvez rencontrer des problèmes avec 'ResultSet # getString' en lançant une vérification' SQLException'. Je pense que cela viole l'interface 'Function'. – bradimus