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


92

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

我个人使用此方法:

//// Section name here ////

但是,某些编辑器似乎对此有问题。

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

#pragma mark -
#pragma mark Section name here

这将导致XCode中的菜单如下所示:

替代文字


4
作为iOS开发人员,这是我开始使用Android Studio时最想念的地方
Chris Chen

1
不推荐使用现代IDE和语言,这是一个糟糕的做法。如果必须对代码进行分段,则可能已经违反了单一职责原则,最好拆分为不同的类/文件。如果有多个编辑器,一段时间后还是可能会不同步,因为有些编辑器会随之而来,有些则会重构并重新组织代码,或者自动保存和格式化操作会破坏它。
f.carlsen '17

不赞成投票:我同意@ f.carlsen。如果您使用注释来构造您的班级,则很可能会违反“ 单一责任原则”
schrieveslaach

令人讨厌的是:当Java支持Swift样式的类扩展时,请打电话给我,在该类扩展中您可以在逻辑上将接口实现分为不同的部分。是的,一个类可以很好地同时实现多个接口。
威廉·恩崔肯

Answers:


66

我个人使用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中,我创建了一组自定义模板(例如Eclipse的Preferences对话框中的Java-> Editor-> Templates),它们会生成这些栏。-sepa(用于访问器的SEParator)-sepp(用于属性的SEParator)-sepc(用于构造函数的SEParator)等

我还修改了标准的“新类”模板(“ Eclipse首选项”屏幕中的Java->代码样式->代码模板)

另外,还有一个旧的Eclipse插件,称为Coffee-bytes,它增强了Eclipse折叠部分代码的方式。我不知道它是否仍然有效,但是我建议可以通过添加特殊注释(例如// [SECTION]等)来定义任意可折叠区域。它在最新的Eclipse版本中仍然可能有效,因此请看一下。


144

对于intellij / android studio,有一个了不起的解决方案。
开头为:
//region Description
结束于:
//endregion

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

如果需要,您还可以添加自己的行以进行其他视觉分隔。可以像任何功能一样使用+/-按钮随意缩小和扩展该区域。您也可以使用Command+ Alt+ PeriodCtrl+ 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

这非常有用,谢谢安德烈。顺便说一句,我正在使用eclipse键盘快捷键布局,我认为快捷键不适用于我,但是'// region'效果很好
ThinkBonobo 2015年

2
我在结构视图中看不到任何显示方式,因此我仍在使用伪造的空成员(以及抑制未使用的警告)。
汤姆(Tom)

1
有什么办法可以在Android Studio(结构视图)中显示这些区域?
MiguelHincapieC's

链接已死;此IntelliJ IDEA博客可能是有用的参考。它还提到了类似NetBeans的样式折叠项 <editor-fold ...>
富兰克林·于

最好的答案
米哈尔Ziobro

14

Eclipse定义了一个@category javadoc注释(滚动到标记为“ Category support”的部分),该注释允许在大纲视图中按类别进行过滤。不完全是您想要的。我很惊讶没有人编写过一个Eclipse插件,它提供的视图类似于您的屏幕快照。


但是,在大多数Java视图中,可以根据类的成员过滤类成员,以作为示例将其隐藏为默认的getter和setter。
Riduidel

不知道为什么我不能在Android Studio中使用@category,你知道我该怎么做才能实现相同的行为吗?
MiguelHincapieC

6

当我使用xcode时,我也很喜欢。对于eclipse,我使用ctrl + o(快速概述)在Java类中导航。


6

在代码中使用不必要的注释/标记来帮助工作可能不是一个好习惯。我对xcode和Java开发几乎一无所知,但是所有主要的IDE支持都支持查找没有任何特殊标记(例如eclipse)的成员,并使用可以通过ctrl+OIntellij 触发的大纲视图显示方法和成员(我更喜欢在mac上使用更多代码,并且具有社区版也具有相同的大纲概念,可以使用(ctrl + f12)进行快速访问。因此,我的意思是不要在代码中使用任何不必要的标记,因为所有(或至少良好/健全)的IDE都可以自动执行此操作。


2
同意,截面标记只会增加视觉混乱。您的课堂应该集中注意力,使这些事情无关紧要。
Paul McKenzie 2010年

15
当然可以,但是将方法分为逻辑部分和标记部分可以帮助将视觉顺序强加给原本是方法的平坦列表。有时您不确切知道要使用哪种方法,最好一次全部采用相关方法,并有所了解,您会看到相关代码的全部内容。
Brian Rak 2013年

4

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

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


5
拆分代码部分似乎仅在理论上是可能的。例如,使用具有诸如名称之类的属性的Client类和一个集合“发票”。我希望能够将其拆分为包含“名称的获取器/设置器”的“名称”部分和包含发票的添加/删除方法的“发票”部分。将这些拆分成一个只能为每个类添加一个属性的类层次结构似乎是不切实际的,即“ NamedEntity”,“ NameAndAddressEntity”,“ Invoicable”,...
Frederik 2010年

3

除了提供Andrey的答案之外,要使用// region // endregion,我们还会在主要代码段中插入[BigAscii字母] [1]。快速滚动时,它确实很突出。这种方法的一个缺点是我无法搜索它,因此您需要像在下面一样在“横幅”下方添加一个搜索词。

块引用

//    _      _____          _____                  _   _
//   | |    |  __ \   /\   |  __ \      /\        | | | |
//   | |    | |  | | /  \  | |__) |    /  \  _   _| |_| |__
//   | |    | |  | |/ /\ \ |  ___/    / /\ \| | | | __| '_ \
//   | |____| |__| / ____ \| |       / ____ \ |_| | |_| | | |
//   |______|_____/_/    \_\_|      /_/    \_\__,_|\__|_| |_|
//
//   Search here with: LDAP Auth

[1]:http : //patorjk.com/software/taag/#p=display&c=c%2B%2B&f=Big&t=LDAP身份验证


3

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

/** RecyclerOnItemClickListener */

/** 
 * RecyclerOnItemClickListener
 */

因此,在IDE中,它以不同于醒目的注释灰色以外的其他颜色显示。


2

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

代码的任何自动重组都会导致这种标记失效。

如果要分组,请考虑将属于同一类的事物放在一起,将不属于不同类的事物放在一起。



-19

对于IntelliJ,我喜欢:

        public void ________________INIT__________________() {};

文件结构看起来很漂亮!


3
这似乎是一个非常糟糕的解决方案。当您的目标是组织代码时,为什么还要声明其他方法?
nsg

1
那是为了使整个文件在“结构”视图中分段。
Tycho Pandelaar

1
这只是一个真正在android studio中看起来真的,建议你自己作为答案,我将使用
user170317 2013年

13
我见过最糟糕的东西!而且是公共的!o_O
Cocorico 2014年

3
这是在结构视图中显示的唯一答案,并且可以在不同的IDE上使用。让它变得私密,咧嘴笑着接受,或者,如果您不喜欢它,则不要使用它,但是不要通过将其否决掉而对其他读者隐藏此答案。
汤姆(Tom)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.