【发布时间】:2014-06-30 23:20:26
【问题描述】:
我不想让一个普通的 lambda 实现一个方法并将它的 toString 重新定义为一个附加值。我希望 lambda 表达式仅实现 toString 方法。 我知道我表达的不是很好,但我相信你会通过这个例子理解我。
public class LambdaToStringTest {
public interface ToStringInterface {
public abstract String toString();
}
public static void main(String[] args) {
print("TRACE: %s", (ToStringInterface)()->someComputation()); // <<-- ERROR: The target type of this expression must be a functional interface
}
private static void print(String format, Object... args) {
System.out.println(String.format(format, args));
}
}
如果我更改方法的名称,它会编译,但它不会覆盖 toString,因此 print 方法不会打印预期的内容。
这是尝试定义一个日志子系统,该子系统仅在需要时(当它真正要打印时)评估 lambda,但与非 lambda 参数兼容。我知道实现它的其他方法,但我想知道为什么我不能这样做,是否有解决方法或者我做错了什么,
【问题讨论】:
-
我不是在问这个:stackoverflow.com/questions/16544583/… 我只想实现 toString。