나는 람다 및 간단한 값을 varag에 통합하려고합니다.자바 vararg 패스 람다 및 값
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
오류 : 메서드 로그는 주어진 유형에 적용 할 수 없습니다. REQUIERED String, Object [] found : String, String, int,() -> "aaa",() -> 111 이유 : 가변 인자 불일치; 객체가 함수 인터페이스가 아닙니다.
람다와 값을 모두 vararg에 전달할 수 있습니까?
varargs는 같은 유형이어야합니다. 'Log ("% s % d % s % d", (Object) "bbb", (Object) 222, (Object)() -> "aaa" , (Object)() -> 111); –
@ Timothy Truckle 해당 솔루션은 여전히 컴파일러 오류를 제공합니다. – n247s
(Object)를 시도했지만 도움이되지 않습니다. (공급 업체) 캐스팅이 문제를 해결했습니다. – Dmitry