如何在Java注释中标记代码的逻辑部分?

如何在Java注释中标记代码的逻辑部分?,java,comments,Java,Comments,Java类通常被划分为逻辑“块”。是否有标记这些部分的惯例?理想情况下,它将得到主要IDE的支持 我个人使用这种方法: //// Section name here //// #pragma mark - #pragma mark Section name here 然而,一些编辑似乎对此有问题 例如,在Objective-C代码中,您可以使用以下方法: //// Section name here //// #pragma mark - #pragma mark Section name

Java类通常被划分为逻辑“块”。是否有标记这些部分的惯例?理想情况下,它将得到主要IDE的支持

我个人使用这种方法:

//// Section name here ////
#pragma mark -
#pragma mark Section name here
然而,一些编辑似乎对此有问题

例如,在Objective-C代码中,您可以使用以下方法:

//// Section name here ////
#pragma mark -
#pragma mark Section name here
这将导致XCode中出现如下菜单:


据我所知,没有支持的将类成员分组在一起的规范。您可以使用您喜欢的任何注释约定,但它可能不受任何工具的支持


最好通过继承或聚合将相关成员分组到单独的类中。这被认为是一种很好的OOP风格

我在使用xcode时也喜欢这种风格。对于eclipse,我使用ctrl+o(快速大纲)在Java类中导航

在代码中使用不必要的注释/标记来帮助工作可能不是一个好的做法。我对xcode和java开发知之甚少,但所有主要IDE支持查找不带任何特殊标记的成员,如eclipse,显示了使用大纲视图的方法和成员,大纲视图可以使用
ctrl+O
、Intellij触发(我更喜欢在mac上使用,而且还有一个社区版)具有相同的大纲概念,可以使用(ctrl+f12)快速访问。因此,我在这里的观点是,不要在代码中使用任何不必要的标记,因为所有(或至少良好/正常的)IDE都可以自动进行标记

我个人使用80个字符的行分隔符,如下所示:

public class Client {

    //================================================================================
    // Properties
    //================================================================================

    private String name;
    private boolean checked;

    //================================================================================
    // Constructors
    //================================================================================

    public Client() {
    }

    public Client(String name, boolean checked) {
        this.name = name;
        this.checked = checked;
    }

    //================================================================================
    // Accessors
    //================================================================================

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public boolean isChecked() {
        return checked;
    }

    public void setChecked(boolean checked) {
        this.checked = checked;
    }

}
当然,对于这样一个小的POJO来说,这似乎有点过头了,但相信我,它在一些大型项目中非常有用,我必须浏览大型源文件,快速找到我感兴趣的方法。它还有助于理解源代码结构

在Eclipse中,我创建了一组自定义模板(Java->Editor->Eclipse首选项对话框中的模板),用于生成这些条,例如。 -sepa(存取器分离器) -sepp(属性分隔符) -sepc(施工人员分隔符) -等等

我还修改了标准的“新类”模板(Eclipse首选项屏幕中的Java->Code Style->Code Templates)

此外,还有一个名为的旧Eclipse插件,它增强了Eclipse折叠部分代码的方式。 我不知道它是否仍然有效,但我记得有人可以通过添加特殊注释来定义任意的可折叠区域,比如//[SECTION]之类的。
它可能在最近的Eclipse版本中仍然有效,所以请看一看

现代IDE允许您以多种不同的方式查看代码,甚至可以重新组织代码。Eclipse甚至允许您在另一个面板中查看光标所在代码的定义

任何代码的自动重新组织都会导致此类标记崩溃


如果你想分组,那么考虑把事物放在同一个类中,而不属于不同的类。p> Eclipse定义了一个(滚动到标记为“Category support”的部分),它支持在大纲视图中按类别进行过滤。不完全是你想要的。我很惊讶没有人写过一个Eclipse插件,它提供了一个像你的屏幕截图那样的视图。

如果你可以对你的方法进行集群,那么就专门为你想在一节中捕捉的概念编写另一个类。继续,创建文件是免费的。

对于IntelliJ,我喜欢:

        public void ________________INIT__________________() {};

文件结构看起来很漂亮

对于intellij/android studio,有一个惊人的解决方案。
从:
//地区描述

并以:
//endregion

快捷方式在菜单中,您可以使用Command+Alt+T(Mac)或Ctrl+Alt+T(Windows)打开

如果需要,还可以添加自己的行以进行额外的视觉分隔。 该区域可以像任何功能一样使用+/-按钮随意收缩和扩展。 还可以使用Command+Alt+Period(Ctrl+Alt+Period)在区域之间导航

例如:

//region Parceler Implementation
//---------------------------------------------------------------------------------------
@Override
public int describeContents() {
    return 0;
}

@Override
public void writeToParcel(Parcel dest, int flags) {
    dest.writeParcelable(this.die, 0);
    dest.writeParcelable(this.dieSprite, 0);
}

private DieVm(Parcel in) {
    this.die = in.readParcelable(Die.class.getClassLoader());
    this.dieSprite = in.readParcelable(Sprite.class.getClassLoader());
}

public static final Parcelable.Creator<DieVm> CREATOR = new Parcelable.Creator<DieVm>() {
    public DieVm createFromParcel(Parcel source) {
        return new DieVm(source);
    }

    public DieVm[] newArray(int size) {
        return new DieVm[size];
    }
};
//---------------------------------------------------------------------------------------
//endregion
//区域包裹器实现
//---------------------------------------------------------------------------------------
@凌驾
公共int描述内容(){
返回0;
}
@凌驾
公共无效写入包裹(包裹目的地,内部标志){
dest.writeparceable(this.die,0);
dest.writeparceable(this.dieSprite,0);
}
私人DieVm(包裹内){
this.die=in.readParcelable(die.class.getClassLoader());
this.dieSprite=in.readParcelable(Sprite.class.getClassLoader());
}
public static final Parcelable.Creator=新建Parcelable.Creator(){
公共DieVm createFromParcel(地块源){
返回新的DieVm(源);
}
公共DieVm[]新数组(整数大小){
返回新的DieVm[大小];
}
};
//---------------------------------------------------------------------------------------
//端区

除了Andrey提供的答案外,为了使用//region//endregion,我们在主要代码部分插入[bigscii字母][1]。当快速滚动时,它真的很突出。这种方法的一个缺点是,我无法搜索它,因此您需要像我在下面所做的那样,在“横幅”下方添加一个搜索词

大宗报价

[1] :Auth

我会使用;或将以下内容用作简单的“分隔符”(单行或三行):


因此,在IDE中,它以不同的颜色显示,而不是不显眼的注释灰色。

同意,部分标记只会增加视觉混乱。你的类应该集中足够的注意力,以使这些内容变得无关紧要。当然,但是将方法分组到逻辑和标记的部分可以帮助将视觉顺序强加给一个简单的方法列表。有时你不知道你想要的是哪种方法,最好一次把所有相关的方法都包含进去,并且知道你看到了相关代码的全部内容