美文网首页
Java基础002:import static

Java基础002:import static

作者: mr_franklin | 来源:发表于2017-03-07 14:21 被阅读49次

    含义

    import static(静态引用)是Java1.5引入的一个新语法。
    之前我们如果想调用一个类里的静态变量,需要首先import这个类,再使用类名.成员名的方式:

    import com.demo.Domain; // import 类
    public class Demo {
        public static void main(String[] args) {
            System.out.println(Domain.DATA); // 需要使用: 类名.成员名
        }
    }```
    使用`import static`可以省略类名,使得代码编写的更加简洁:
    

    import com.demo.Domain.DATA; // import 类
    public class Demo {
    public static void main(String[] args) {
    System.out.println(DATA); // 直接使用静态变量名
    }
    }```

    一个设计原则

    想象一下,我们设计了一个常量接口:

    public interface Constants {
        String HELLO = "hello";
        String WORLD = "world";
        String MAN = "man";
        String WOMAN = "woman";
    }
    

    为了引用它的成员,有些人可能会定义一个class继承这个接口。那么,本来只是想引用这些静态成员来实现这个class内部逻辑,却使得它们作为这个class的一部分,对外暴露给其他的class了,这叫做:Constant Interface Antipattern(请参考《effective java》)

    public class Constants implements  Constants {
    }
    

    正确的做法是使用import引用这个常量接口或者静态成员(全部或部分),has ais a在这种场景下更合适。

    用法

    首先,不可滥用!
    由于import static会省略静态成员的类名,违背了面向对象的原则。如果使用不当,势必会造成代码可读性和可维护性的下降。

    那么,该何时使用呢?

    只有在多次使用同一个类的静态成员时,为使代码简洁,并且不会造成代码混乱时。

    其实,当我在阅读spring-boot源码时,发现很少使用import static,用的最多的地方就是在单元测试中了:

    import static org.assertj.core.api.Assertions.assertThat;
    @Test
    public void excludeSimple(Set result) throws ArtifactFilterException {
         assertThat(result).isEmpty();
    }
    

    最后,import static在平时的场合使用其实并不多,使用时需谨慎!

    参考官网:
    https://docs.oracle.com/javase/1.5.0/docs/guide/language/static-import.html

    相关文章

      网友评论

          本文标题:Java基础002:import static

          本文链接:https://www.haomeiwen.com/subject/tkrmgttx.html