【发布时间】:2020-12-10 22:28:45
【问题描述】:
Apache Log4j 2.12.1中的接口org.apache.logging.log4j.Logger有以下2个方法:
void info(String message, Object... params);
void info(String message, Supplier<?>... paramSuppliers);
在我的代码中,我的意图是调用第二个方法,第二个 arg 是 lambda paramSupplier。令人惊讶的是,在运行时,第一个方法被调用,它打印了 lambda 的 obj 引用而不是实际的参数值。
我很困惑为什么这些方法没有被编译器标记为模棱两可。这是在 Java 11 上。我还在同一个 Logger 接口中看到了许多其他方法,其中方法签名的区别只是一个方法采用 Object 而另一种方法采用 Supplier<?> 在同一位置在 args 列表中,与所有其他方法 args 的类型和顺序匹配。
我发现了以下两个问题:重载方法消歧,但这些答案似乎无法解释这一点。
【问题讨论】:
-
你能发布你的代码吗?如果我们不知道您具体在做什么,我们很难帮助您解决问题。
标签: java log4j overloading