我可以在不使用类名的情况下调用另一个类的静态方法吗?

时间:2018-04-29 06:35:42

标签: java class static-methods

我可以在不使用类名的情况下(在同一个包中)调用另一个类的static方法吗?有类似的问题,但所有答案都使用类名。

3 个答案:

答案 0 :(得分:7)

即可。 但是,你需要import它。 具体 import static。像,

import static com.package.OtherClass.someMethod;

然后你可以像someMethod(String)一样打电话给

someMethod("Like that");

答案 1 :(得分:1)

可以使用静态导入,但我想提醒您不要使用静态导入。静态导入会混淆代码所在的位置,这使得理解代码结构变得更加困难。结合*导入,人类无法再确定(不花费大量时间)方法的来源,尽管IDE可以。

为什么它可能是坏的一个例子:假设您想要了解在开源项目中如何解决问题,以获得您自己项目的想法。你知道吗?您可以在线查看HTML代码。事情进展顺利!您可以查看要查看的Java文件。然后有这种奇特的方法“foo”。所以你在页面上搜索“foo”并且恰好有一个匹配(你正在看的那个)。顶部有多个import static blabla。*行,所以这是一个死胡同。你下载了源代码。接下来,您对整个项目进行全文搜索,以查找“931文件中的foo(”= = 5000匹配。除此之外,如果您想要查看代码,除了将项目加载到IDE之外,您将无法再进行选择。如果作者已经明确了方法所处的位置,那么你就不必这样做。现在,如果你不使用*进口,那么找到这个类是一个两步的过程,所以它几乎不是我个人根本不使用静态导入。使用简短而有意义的名称,我发现显式类型更可取。

我不喜欢静态导入,因为它打破了OO(好吧,不是技术上,只是概念上)。但这是个人意见,绝大多数人不同意我的看法。所以请随意形成自己的。以下帖子讨论了何时(不)使用静态导入: What is a good use case for static import of methods?

答案 2 :(得分:0)

是的,可以通过使用静态导入来调用类的静态方法而不使用Class引用。

前:

import static java.lang.Math.*;

public class compute{
    public double getSqrt(double n){
       return sqrt(n)
    }
}

如果在类中的许多地方使用静态方法,最好使用这种方式。