静态导入方法的好用例是什么?

刚收到评论评论我静态导入该方法并不是一个好主意。静态导入是来自DA类的方法,该类主要使用静态方法。因此,在业务逻辑的中间,我有一个似乎属于当前类的da活动:


import static some.package.DA.*;

class BusinessObject {

  void someMethod() {

    ....

    save(this);

  }

审稿人并不热衷于我改变代码而我没有,但我确实同意他。给出非静态导入的一个原因是,在定义方法的地方很混乱,它不在当前类中而不在任何超类中,所以它也有一段时间来识别它的定义(基于Web的审查系统没有可点击的IDE之类的链接:-)我真的不认为这很重要,静态导入仍然很新,我们很快就会习惯定位它们。


但另一个原因,我同意的是,一个不合格的方法调用似乎属于当前对象,不应该跳转上下文。但如果确实属于它,那么扩展超级类是有意义的。


所以,当它是有意义的静态导入的方法呢?你什么时候做的?您是否喜欢不合格电话的样子?


编辑:流行的观点似乎是静态导入方法,如果没有人会把它们混淆为当前类的方法。例如,java.lang.Math和java.awt.Color中的方法。但是如果abs和getAlpha不模糊,我不明白为什么readEmployee是。在许多编程选择中,我认为这也是个人偏好的事情。


感谢您的回复,我正在结束这个问题。


幕布斯6054654
浏览 342回答 3
3回答

慕森卡

静态导入的另一个合理用途是使用JUnit 4.在JUnit方法的早期版本中,类似于assertEquals并且fail自测试类扩展以来继承了这些方法junit.framework.TestCase。// old wayimport junit.framework.TestCase;public class MyTestClass extends TestCase {    public void myMethodTest() {        assertEquals("foo", "bar");    }}在JUnit 4中,测试类不再需要扩展TestCase,而是可以使用注释。然后,您可以静态导入断言方法org.junit.Assert:// new wayimport static org.junit.Assert.assertEquals;public class MyTestClass {    @Test public void myMethodTest() {        assertEquals("foo", "bar");        // instead of        Assert.assertEquals("foo", "bar");    }}JUnit 文档以这种方式使用它。

叮当猫咪

有效的Java,第二版,在第19项末尾指出,如果您发现自己大量使用实用程序类中的常量,则可以使用静态导入。我认为这个原则适用于常量和方法的静态导入。import static com.example.UtilityClassWithFrequentlyUsedMethods.myMethod;public class MyClass {    public void doSomething() {        int foo= UtilityClassWithFrequentlyUsedMethods.myMethod();        // can be written less verbosely as        int bar = myMethod();    }}这有利有弊。它使代码更具可读性,代价是丢失一些关于定义方法的直接信息。但是,一个好的IDE会让你进入定义,所以这不是一个问题。你仍然应该谨慎使用它,并且只有当你发现你自己使用导入文件中的东西很多次。编辑:更新为更具体的方法,因为这是这个问题所指的。无论输入什么(常数或方法),该原则都适用。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java