Je suis en train d'unir lambdas et des valeurs simples dans varag.Java vararg passer lambda et les valeurs
public static void Log(String format, Object ... args) {
final Object[] fmt = new Object[ args.length ];
for(int i = 0; i < args.length; i++)
fmt[i] = args[i] instanceof Supplier ?
((Supplier) args[i]).get() :
args[i];
final String s = String.format(format, fmt);
System.err.println(s);
}
final Supplier
s =() -> "aaa",
d =() -> 111;
Log("%s %d %s %d", "bbb", 222, s, d); // OK, OUTPUT: bbb 222 aaa 111
Log("%s %d %s %d", "bbb", 222,() -> "aaa",() -> 111); // COMPILE FAIL
ERREUR: le protocole ne peut pas être appliqué à des types donnés; REQUIERED Chaîne, Object [] trouvé: String, String, int,() -> "aaa",() -> 111 RAISON: varargs mismatch; L'objet n'est pas une interface fonctionnelle
Est-il possible de transmettre à la fois lambdas et valeurs à vararg?
, (Object)() -> 111); ' –
@ Timothy Truckle Cette solution donnera toujours une erreur de compilation. – n247s
J'ai essayé (Object), mais ça n'aide pas. La coulée (fournisseur) a résolu le problème. – Dmitry