对导入的库进行命名空间以在Java中保持清晰

时间:2018-08-16 18:24:49

标签: java import

是否可以保留在Java中导入的方法的名称空间?我从技术和实践角度都想知道。

例如,假设我要导入spark库,以便可以使用它的get()方法,我可能会做类似的事情

import static spark.Spark.*;

public static void main(String[] args) {
    get(....);
    // do stuff
}

对于正在研究这个问题的人(尤其是当项目更大并且导入了几件事)时,“ get()”的来源并不立刻显而易见。我很想能够做这样的事情

import static spark.*;

public static void main(String[] args) {
    Spark.get(....);
    // do stuff
}

如您所见,get()调用现在在Spark下以视觉方式命名。

通常认为这是允许的,还是这种方法有缺点?如果是这样,为什么会有更多项目不使用这种方法?

谢谢!

2 个答案:

答案 0 :(得分:1)

在我看来,这完全取决于您真正使用的是什么-静态调用上的类名是可以的,但是当您经常使用某些东西时,它就会成问题-因为这样您才能掩盖假感觉含义背后的逻辑。 / p>

我还要说get对于静态方法来说是一个非常该死的坏名字-如果方法名称具有更多含义,那么它们对类名称的依赖就会减少-但是在这里,使用框架时我们别无选择。

答案 1 :(得分:1)

首先,在您希望执行的操作中使用静态导入是不正确的。照原样,这意味着导入类DialogPane的所有静态成员,而spark是包。类spark将是未知的,并且会出现编译错误。除去上面的Spark,然后导入spark包的所有类。您将类成员称为static,将实例成员称为ClassName.member。类名本身的冲突很少见。因此,该方案按原样具有很好的可读性和优雅性。 但是,如果您的代码使用了很多导入类的静态成员,则每次通过在类名前加前缀来引用它们可能很麻烦等,因此我们有一种静态导入的捷径。 Java documentation 对此有很好的建议,也许可以回答您的问题。

instanceName.member