繁体   English   中英

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

[英]Namespacing imported libraries for clarity in Java

是否可以保留在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下在视觉上具有名称空间。

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

谢谢!

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

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

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

... So when should you use static import? Very sparingly! Only use it when you'd otherwise be tempted to declare local copies of constants, or to abuse inheritance (the Constant Interface Antipattern). In other words, use it when you require frequent access to static members from one or two classes

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM