Java基础002:import static

含义

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 32,111评论 18 399
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,771评论 19 139
  • 一:java概述:1,JDK:Java Development Kit,java的开发和运行环境,java的开发工...
    ZaneInTheSun阅读 7,604评论 0 11
  • (一)Java部分 1、列举出JAVA中6个比较常用的包【天威诚信面试题】 【参考答案】 java.lang;ja...
    独云阅读 11,942评论 0 62
  • 经历第一天的入职住宿手续的安排,步入正式工作的岗位。怀着开心激动的心情早上七点钟起了床(因为昨天郑龙师兄说要来接我...
    常德临澧小游阅读 3,978评论 6 2