为什么我不能在Java中“静态导入”一个“等于”方法?
2022-09-01 09:46:35
我喜欢在这里使用这种方法:
org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2)
唯一的缺点(例如,与Google Guava相比),是我无法静态导入该方法。即这是无用的:
import static org.apache.commons.lang.ObjectUtils.equals;
...因为我的Eclipse编译器在编写时无法正确链接该方法
equals(obj1, obj2);
错误是:
对象类型中的方法等于(对象)不适用于参数(...,...)
为什么?如果任何超类型中存在具有相同名称(但不是相同签名)的方法,我的静态导入方法是否不适用?这是否在 JLS 中正式指定?还是一些 Eclipse 编译器问题?
更新
这也不起作用:
import static org.apache.commons.lang.ObjectUtils.defaultIfNull;
public class Test {
void test() {
defaultIfNull(null, null);
// ^^ compilation error here
}
void defaultIfNull() {
}
}
javac 错误消息:
Test.java:5: defaultIfNull() in Test cannot be applied to (<nulltype>,<nulltype>)
defaultIfNull(null, null);
^
1 error