源:https://blog.ximinghui.org/30dd840e/index.html

有时候一个代码源文件中内容过多时,我们可能想要对其进行分区,比如我想要将我的实体类分为 字段行为规则校验创建方法 四个部分或分区。

但是,我该怎么告诉我的 NetBeans(划掉 Eclipse(划掉 IntelliJ IDEA 并让它知道我的意思呢?

image1.png

一般开发者可能会用一些比常规代码注释稍微醒目的方式标记一下代码,比如:

public class User {

    // ======================== 字段 ========================

    private final UserId id;

    private UserProfile userProfile;

    private String password;

    private UserType userType;

    private final ZonedDateTime creationTime;

    private ZonedDateTime lastLoginTime;

    private Boolean enabled;

    // 省略私有全参构造器

    // ======================== 行为 ========================

    public UserId getId() {
        return id;
    }

    public UserProfile getUserProfile() {
        return userProfile;
    }

    public void updateEmail(String newEmail) {
        userProfile = userProfile.withEmail(newEmail);
    }

    public void updateFullName(PersonName newFullName) {
        userProfile = userProfile.withFullName(newFullName);
    }

    public String getPassword() {
        return password;
    }

    public UserType getUserType() {
        return userType;
    }

    // ======================== 创建方法 ========================

    // 省略工厂方法

}

或者这样的:

//////////////////////////// 校验相关 ////////////////////////////

这样的:

/////////////////////////////////////////////////////////////////
//                           校验相关                           //
/////////////////////////////////////////////////////////////////

这样的:

// ##############################################################
// #                          校验相关                           #
// ##############################################################

甚至是这样的:

/*
 *    ┏┓   ┏┓
 *   ┏┛┻━━━┛┻┓
 *   ┃        ┃
 *   ┃   ━    ┃
 *   ┃ ┳┛ ┗┳ ┃
 *   ┃        ┃
 *   ┃   ┻    ┃
 *   ┃        ┃
 *   ┗━┓   ┏━┛
 *     ┃   ┃    从这里开始,以下就是校验代码啦~
 *     ┃   ┃
 *     ┃   ┗━━━┓
 *     ┃      ┣┓
 *     ┃     ┏┛
 *     ┗┓┓┏━┳┓┏┛
 *      ┃┫┫ ┃┫┫
 *      ┗┻┛ ┗┻┛
 */

但是,朋友们有没有发现,无论设计的多么独特,无论自己玩的多嗨,IDE都不鸟你,再花哨对于IDE来说也只是普通的代码注释罢了。

那有没有一种办法能让IDE提供一种支持呢?比如能够识别出来我想要标记的这一块代码区域?

聪明的小伙伴一定猜到了,那必须得有啊!不然也不会有我这篇文章了。

下面开始正文!!!

方式1:<editor-fold> 标记

<editor-fold> 标记最早是由一个名为 NetBeans 的 Java IDE 在 5.0 版本(大概2006年左右)中引入的,它被设计用于手动定义代码折叠区域。之后也被 Visual Studio Code、JetBrains系列 IDE软件所支持。

注:Eclipse原生不支持这种标签,需要安装插件。

它的用法如下:

public class User {

    //<editor-fold desc="字段">

    private final UserId id;

    private UserProfile userProfile;

    private String password;

    private UserType userType;

    private final ZonedDateTime creationTime;

    private ZonedDateTime lastLoginTime;

    private Boolean enabled;

    //</editor-fold>

}

用 <editor-fold> 标记在代码区域的开始,并用 </editor-fold> 标记在代码区域结束的位置。

这样IDE就会识别到这个区域,提供点击折叠区域代码的功能,desc属性的描述文本将会在折叠时显示出来。以IntelliJ IDEA为例,有了这个标签标记后,代码前面就会出现一个可点击的 “” 控件,鼠标点击后即可折叠这块区域的代码。未折叠和已折叠的效果图如下:

image2.png

image3.png

另外,该标签还有defaultstate属性,如果设置为collapsed值,则IDE会默认折叠代码,示范如:
<editor-fold defaultstate="collapsed" desc="字段"> 。不过这个属性只有NetBeans支持,其它IDE均不支持这个特性。

方式2:region...endregion 标记

#region 和 #endregion 标记用于在代码中定义可折叠区域,最初在 C# 等语言中引入,随后被多个集成开发环境(IDEs)采纳,以增强代码的可读性和组织性。支持的IDE有Visual Studio、Visual Studio Code、JetBrains系列

注:Eclipse原生不支持这种标签,需要安装插件。NetBeans不支持这种标记。

两种标记不同的是,<editor-fold> 是编辑器提供的支持,而 #region ... #endregion 是C#、Python等语言支持的语法,当然部分编辑器也提供支持。

#region ... #endregion的用法如下。

C#语言:

#region 这是区域名
void MyMethod() {
    // 代码略
}
#endregion

Python语言:

# region 这是区域名
def my_function():
    # 代码略
# endregion

Java语言不支持这中标记,但是一些主流的IDE支持,比如VScode和IntelliJ IDEA。

Java中的使用示范如下:

image4.png

image5.png


ximinghui
1 声望0 粉丝

一枚普普通通的程序猿