gpt4 book ai didi

java - 为什么我不能在 Java 中使用 "static import"和 "equals"方法?

转载 作者:行者123 更新时间:2023-12-01 18:56:06 25 4
gpt4 key购买 nike

我喜欢在这里使用这种方法:

org.apache.commons.lang.ObjectUtils.equals(Object object1, Object object2)

唯一的缺点(例如与 Google Guava 相比)是我无法静态导入该方法。 IE。这是没用的:

import static org.apache.commons.lang.ObjectUtils.equals;

...因为我的 Eclipse 编译器在编写时不会正确链接该方法

equals(obj1, obj2);

错误是:

The method equals(Object) in the type Object is not applicable for the arguments (..., ...)

这是为什么呢?如果任何父类(super class)型中存在具有相同名称(但签名不同)的方法,我的静态导入方法是否不适用? 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

最佳答案

碰撞实际上是与Object.equals()发生的。所有类均继承自 Object,因此具有导致此冲突的 Object.equals() 方法。

您是按姓名导入,而不是按签名。因此,您实际上无法导入名为 equals 的静态方法。或者更确切地说,您可以导入它,但不能使用它。我确实同意这应该有效。

(我的评论是我自己的答案。)

关于java - 为什么我不能在 Java 中使用 "static import"和 "equals"方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59671613/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com