Ich versuche, Lambdas und einfache Werte in Varag zu vereinen.Java vararg pass Lambda und Werte
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
Fehler: Methode Protokoll kann nicht auf bestimmte Typen angewendet werden; REQUIERED String, Object [] gefunden: String, String, int,() -> "aaa",() -> 111 GRUND: varargs mismatch; Objekt ist keine funktionale Schnittstelle
Ist es möglich, beide Lambdas und Werte an Vararg zu übergeben?
varargs müssen denselben Typ haben, also versuchen Sie Folgendes: 'Log ("% s% d% s% d ", (Objekt)" bbb ", (Objekt) 222, (Objekt)() ->" aaa " , (Object)() -> 111); ' –
@ Timothy Truckle Diese Lösung wird immer noch einen Compilerfehler geben. – n247s
Ich habe versucht (Objekt), aber es hilft nicht. (Zulieferer) Casting löste das Problem. – Dmitry