Ma situation:Java 8: Comment utiliser une méthode statique en tant que paramètre pour une autre méthode?
class Test {
private static void xxx(String s) throws SQLException {
System.out.println(s);
}
private static void yyy(Consumer<String> f) {
try {
f.apply('hello');
} catch (SQLException e) {
System.out.println("error");
}
}
public static void main(String args[])() {
yyy(xxx); // <-- not working!!
}
}
Ce que je suis en train de faire est d'adopter une méthode statique comme paramètre pour une autre méthode statique. Je pense que la façon correcte de déclarer la signature de la méthode yyy
est avec Consumer
, mais je ne suis pas vraiment sûr de l'autre partie, en passant xxx
comme paramètre.
Une solution que j'ai trouvé est d'écrire
yyyy(s -> xxx(s));
Mais il semble laid et il ne fonctionne pas vraiment si xxx
émet des exceptions.
En utilisant
yyy(Test::xxx);
J'ai eu cette erreur
error: incompatible thrown types SQLException in method reference
Une référence correcte à un membre statique (champ, méthode, classe imbriquée ...) doit inclure le nom de la classe. Ainsi 'Test :: xxx', pas' xxx'. – RealSkeptic