Java基础002:import static

2017-03-07  本文已影响49人  mr_franklin

含义

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

上一篇下一篇

猜你喜欢

热点阅读