Java相当于C#中的#region


488

我想在Eclipse中使用区域进行代码折叠;用Java怎么做?

C#中的示例用法:

#region name
//code
#endregion

@MichaelLaVoie:答案已被删除。它有可能转移到另一个SE网站吗?
亚当·帕金


我参加晚了。我同意IKashef的观点,即当前选择的答案还有其他选项。Yaqub Ahmad的回答挽救了我的性命。我不需要下载Intellig IDE。我从cking24343的评论中下载了提到的CoffeeBytes插件,我应用了'null n void'的配置,并且在Luna中运行良好。您需要在应用配置后重新启动
Maximus Decimus

3
开始 //region [Description] 和结束于//endregion
Amir Ziarati

Answers:


215

没有这样的标准等效项。某些IDE(例如Intellij或Eclipse)可以折叠,具体取决于所涉及的代码类型(构造函数,导入等),但没有什么比这更好的了#region


30
实际上这是可以实现的。如果向下滚动此帖子,“ Yaqub Ahmad”将说明如何获取此功能。另外,这里还有一个链接(kosiara87.blogspot.com/2011/12/…),向您展示如何将其添加到现有的Eclipse环境中……非常有用!
cking24343

14
当然。但是没有标准。它是在IDE中执行的,而不是具有语言(或文本)的构造
Brian Agnew

2
@lKashef-那么等效的标准是什么?下面提到的所有内容都与特定的IDE有关,不是吗?
Brian Agnew

4
@ BrianAgnew,OP没有提及任何有关标准的信息,而是只希望能够在其代码中包含类似区域的块。例如,您说过“但没有什么像#region一样。” 在IDEA中,例如// region .. // endregion的工作方式与#region完全相同。首先,没有标准的方法可以执行此操作,因为它取决于IDE本身或插件。具有Microsoft背景的开发人员总是将MS Visual Studio视为“ The” IDE,但实际上,它只是其中的一种,而另一个IDE可能会也可能不会实现这种功能。
Mazen Elkashef '16

4
@BrianAgnew,我差点放弃,直到我看到别人的答案比你的帮助大得多。确实在这里没有难过的感觉,我们所有人都在这里学习和分享我们的知识,并指出我被您的答案误导了一个事实,也许这在2010年是一个好时机,但今天不是。希望你明白我的意思。
Mazen Elkashef '16

476

Jet Brains IDEA具有此功能。您可以为此使用热键环绕(ctrl + alt + T)。这只是IDEA功能。

那里的区域如下所示:

//region Description

Some code

//endregion

3
感谢那!在Android Studio上完美运行。
rogcg 2014年

2
该问题显然要求针对Eclipse的解决方案。
邓肯·琼斯

5
@邓肯1.没错,向人们展示了其他选择。2.我在Intellij下搜索了区域并找到了它。
BHuelse 2015年

2
在Linux上,该热键运行终端
user1209216 '16

1
刚刚尝试过,似乎IntelliJ也支持嵌套区域!太糟糕了,这不是标准的。
Gruber

209

使用Android Studio,请尝试以下操作:

//region VARIABLES
private String _sMyVar1;
private String _sMyVar2;
//endregion

小心://区域后没有空行...

您将获得:


由于Android Studio是基于IntelliJ的,因此经历了所有答案并得出结论,那么必须对此提供支持。指出这一点是一件好事!
丝氨酸2014年

5
bummi,我确实在0.4.2中使用空白行进行了尝试,但仍然可以使用
丝氨酸

2
只是评论/建议(绝不是您问题的答案)。人们普遍认为应该避免使用区域,因为区域可以让您隐藏类的复杂性,而不是使用您的编码风格。代替庞大的类(每个类负责许多功能),而是将代码分解为较小的类。随着时间的推移,这将使您的代码更易于管理。在此处阅读更多信息:blog.codinghorror.com/the-problem-with-code-folding
Daniel Saidi

5
@DanielSaidi哦,恐怖!:)文章“ 我什么都看不见!我必须手动扩展这些部分才能浏览该类中的任何代码。 ” ...的人,因为他太懒了,无法按任何键(这会扩展所有内容文件中的各个部分),则不得使用该功能-这是一个非常棒的功能。现在我正在一个接一个地使用它隐藏我正在工作的类中已经验证过的方法是线程安全的,这确实有助于保持井井有条。确实,我偶尔想知道那是什么我以为在那里,但是那是一个很小的代价……
ycomp

4
@DanielSaidi不是隐藏复杂性,而是隐藏普通的代码,例如变量声明,getter,初始化代码等。还要注意,您不需要#region来折叠在函数和类中找到的“复杂代码”。程序员错误地使用工具的行为并不等于“工具不好”。
user1567453'2

96

语言上没有同等的东西...基于IDE ...

例如在netbeans中:

NetBeans / Creator支持以下语法:

// <editor-fold defaultstate="collapsed" desc="Your Fold Comment">
...
// </editor-fold>

http://forums.java.net/jive/thread.jspa?threadID=1311


1
即使这不是特定于语言的折叠,但在NetBeans中仍然对我有帮助。正是我想要实现的目标。只是希望我的代码对我来说更加方便和井井有条。
靛蓝

有没有可以自动填写此行的快捷方式?
Pini Cheyni '16

1
@皮尼- cheyni - ui.netbeans.org/docs/ui/code_folding/cf_uispec.html 具有可用于折叠式快捷键....
凯文LaBranche

@JadChahine:OP询问了有关Eclipse的问题,但是同意这对NetBeans很好。语法有点笨拙,但是复制粘贴使它足够容易。
AlainD '16


49

可以使用CoffeeScript代码折叠插件将自定义代码折叠功能添加到eclipse中。

经过测试,可以与Eclipse Luna和Juno一起使用。步骤如下

  1. 这里下载插件

  2. 提取档案内容

  3. 复制将plugin和features文件夹的内容粘贴到Eclipse安装目录中的相同命名文件夹中
  4. 重新开始蚀
  5. 导航 Window >Preferences >Java >Editor >Folding >Select folding to use: Coffee Bytes Java >General tab >Tick checkboxes in front of User Defined Fold

    在此处输入图片说明

  6. 创建新区域,如下所示:

    在此处输入图片说明

  7. 重新启动Eclipse。

  8. 尝试折叠是否可以使用带有指定的开始和结束标识符作为前缀的注释

    在此处输入图片说明

    在此处输入图片说明

您也可以下载存档并在此Blog中找到步骤。


2
在eclipse霓虹灯上不适合我:复制和粘贴没有执行任何操作:唯一更改的是在市场>>已安装的插件>>更新下。我更新了coffeeScript插件,但是在Java >>编辑器>>折叠下没有得到“选择要使用的折叠”选项
Angelo Oparah

它可以在Eclipse Oxygen中运行,但是您需要再次重新启动Eclipse。向我显示的图标是红色图标,所以我在配置中进行了更改:“ 窗口”→“首选项”→“ Java”→“编辑器”→“折叠”,单击“ 高级”选项卡,并将“图标”主题设置为“ 现代
Michieru”,

38

这不仅仅是语言功能,更是一种IDE功能。Netbeans允许您使用以下定义来定义自己的折叠定义:

// <editor-fold defaultstate="collapsed" desc="user-description">
  ...any code...
// </editor-fold>

如本文所述,其他编辑器也可能支持此方法,但不能保证。


至少在Android Studio中,您不能折叠部分块。如果折叠规格在一个块外开始,在一个块内结束,则不会激活。
冯·莱蒙加格尔教授2014年

30

最快的方式Android Studio(或IntelliJ IDEA

  1. highlight the code 你想包围它
  2. ctrl+ alt+t
  3. c ==>然后输入说明
  4. 请享用

// region <name>您的代码... // endregion更高效,更简单!hehe; P
diegodsp

30

AndroidStudio地区
创建地区

首先,找到Surround With菜单 (并在需要时定义快捷方式)在此处输入图片说明

然后,选择代码,按Ctrl+Alt+Semicolon->选择region..endregion...
在此处输入图片说明

前往区域

首先,找到Custom Folding捷径。
在此处输入图片说明 其次,从代码中的任何位置按Ctrl+Alt+Period('>' on keyboard) 在此处输入图片说明


20

与大多数发布的相反,这不是IDE。这是语言的东西。#region是C#语句。


55
大多数发布的内容是IN JAVA中这是一个IDE功能。
WhyNotHugo 2011年

1
我确实看到2个最流行的答案,说没有这种语言功能。-1。
Mohayemin

23
在C#中,它部分是IDE,部分是语言。该语言支持预处理器指令,但是预处理器只是忽略它们(与处理器忽略注释的方式相同)。IDE(Visual Studio)使用它们进行代码折叠。
ADTC 2012年

Java没有指定仅IDE(Netbeans)具有的代码折叠功能,Netbeans具有更多特殊注释,例如“ TODO”等。它们对于跟踪您在软件开发项目开发过程中的进度非常有用
Pini Cheyni

17

我是从C#到Java的,并且遇到了相同的问题,而区域的最佳和确切替代方法如下所示(在Android Studio中工作,不了解intelliJ):

 //region [Description]
 int a;
 int b;
 int c;
//endregion

快捷方式如下:

1-选择代码

2按ctrl+ alt+t

3-按下c并写下您的描述


在AndroidStudio版本2.3.1中,它会折叠。我不知道它何时开始折叠。
MiguelSlv '17

谢谢。出于好奇,我可以在Android Studio 3.0 beta 2中正常工作。出于好奇,我在Eclipse Oxygen中尝试过,它在默认情况下不起作用,但没有进一步搜索。
洛朗

15

最好的方式

//region DESCRIPTION_REGION
int x = 22;
// Comments
String s = "SomeString";
//endregion;

提示:输入“;” 在“末端区域”的末尾


1
eclipse不要折叠代码,您正在使用什么IDE?
Ohad Cohen

它可与Android Studio和IntelliJ IDEA一起使用(两者均由JetBrains使用相同的代码库制作)
prashu132 '16

IDE代表“集成开发环境”
Pini Cheyni

12

如果有人感兴趣,可以在Eclipse中一次性折叠所有方法,只需在通常插入断点的位置单击鼠标右键,然后单击“折叠”>“全部折叠”。它知道这不是问题的答案,而只是提供了快速代码折叠的替代方法。


1
打开源代码文件时,您还可以让Eclipse自动折叠所有内容。首选项> Java>编辑器>折叠>“初始折叠这些元素”(选中列表中的全部)。我发现仅关注我需要的内容(尤其是长源代码文件中的内容)很方便。
ADTC

@ADTC-谢谢-每次我打开文件时,我都做过数百次手动操作-再也不会了!
制造商史蒂夫(Steve)2015年

@ToolmakerSteve如果你可以在电脑上手动做任何事情重复的,那里只是是将其自动化的方式。= D
ADTC

8
#region

// code

#endregion

实际上,在IDE中只会给您带来任何好处。使用Java,IDE中没有设置标准,因此与并行没有任何标准#region


3
好吧,如果有标准region,那么我们可以确定Java IDE 支持它,不是吗?
Pacerier,2011年

@Pacerier如果他们支持该标准,是的。我认为#region不仅仅是标准功能,更是一种IDE功能。从理论上讲,Java IDE可以实现此行为,并使其成为事实上的标准
El Mac

4

这是一个例子:

//region regionName
//code
//endregion

100%在Android Studio中工作


我不知道您为什么被拒绝,这实际上可以在Android Studio中使用,而无需任何配置!
maxdelia

2

我通常需要用它来注释代码,因此在开头和结尾使用大括号。

{
// Code
// Code
// Code
// Code
}

它可以用于代码段,但由于它会更改变量的范围,因此可能在某些代码中引起问题。


1

实际上,johann #表示这是一个预处理程序指令,这基本上意味着它告诉IDE该做什么。

在使用#region#endregion在您的代码中的情况下,无论最终代码是否存在,都不会改变最终代码。如果使用它没有任何改变,您真的可以称它为语言元素吗?

除此之外,java没有预处理器指令,这意味着代码折叠的选项是按每个方面定义的,例如在netbeans中使用// <code-fold>语句


1
如果使用它没有任何改变,您真的可以称它为语言元素吗?-评论如何?!
epeleg 2011年

2
在此之前,我已经听到过争论,它不是语言的功能。这个问题“如果使用它不会改变什么,您真的可以称它为语言元素吗?” 是荒谬的。大量的时间重构使代码更易于人类阅读,并且(希望)不做任何事情来影响代码的功能。
Menefee 2012年


-1

在Eclipse中,您可以折叠方括号包裹可变区域块。最接近的是做这样的事情:

public class counter_class 
{ 

    { // Region

        int variable = 0;

    }
}

8
这没用。它在方法内部不起作用,加上它会破坏代码!(私有变量会抱怨说它们想成为最终变量。没有范围定义的变量将无法在内括号之外访问!)
ADTC 2012年

1
我不喜欢这种方法,添加了太多花括号。这可能会导致代码混乱:(
Broken_Window 2014年


-12

有一些选项可以实现相同目的,请遵循以下几点。

1)打开宏资源管理器:

2)创建新的宏:

3)将其命名为“ OutlineRegions”(或任何您想要的名称)

4)右键单击“ OutlineRegions”(在宏资源管理器上显示),选择“编辑”选项,并将以下VB代码粘贴到其中:

    Imports System
Imports EnvDTE
Imports EnvDTE80
Imports EnvDTE90
Imports EnvDTE90a
Imports EnvDTE100
Imports System.Diagnostics
Imports System.Collections

Public Module OutlineRegions

    Sub OutlineRegions()
        Dim selection As EnvDTE.TextSelection = DTE.ActiveDocument.Selection

        Const REGION_START As String = "//#region"
        Const REGION_END As String = "//#endregion"

        selection.SelectAll()
        Dim text As String = selection.Text
        selection.StartOfDocument(True)

        Dim startIndex As Integer
        Dim endIndex As Integer
        Dim lastIndex As Integer = 0
        Dim startRegions As Stack = New Stack()

        Do
            startIndex = text.IndexOf(REGION_START, lastIndex)
            endIndex = text.IndexOf(REGION_END, lastIndex)

            If startIndex = -1 AndAlso endIndex = -1 Then
                Exit Do
            End If

            If startIndex <> -1 AndAlso startIndex < endIndex Then
                startRegions.Push(startIndex)
                lastIndex = startIndex + 1
            Else
                ' Outline region ...
                selection.MoveToLineAndOffset(CalcLineNumber(text, CInt(startRegions.Pop())), 1)
                selection.MoveToLineAndOffset(CalcLineNumber(text, endIndex) + 1, 1, True)
                selection.OutlineSection()

                lastIndex = endIndex + 1
            End If
        Loop

        selection.StartOfDocument()
    End Sub

    Private Function CalcLineNumber(ByVal text As String, ByVal index As Integer)
        Dim lineNumber As Integer = 1
        Dim i As Integer = 0

        While i < index
            If text.Chars(i) = vbCr Then
                lineNumber += 1
                i += 1
            End If

            i += 1
        End While

        Return lineNumber
    End Function
End Module

5)保存宏并关闭编辑器。

6)现在,让我们为宏分配快捷方式。转到“工具”->“选项”->“环境”->“键盘”,然后在“显示包含命令”文本框中搜索您的宏(在文本框中输入“宏:”,将提示宏名称,然后选择您的宏。)

7)现在,在“按快捷键”下的文本框中,可以输入所需的快捷方式。我使用Ctrl + M + N。

采用:

return
{
//Properties
//#region
Name:null,
Address:null
//#endregion
}

8)按保存的快捷键

看到以下结果:

在此处输入图片说明


宏浏览器在哪里?我正在使用Eclipse 4.3.1,找不到它。
Mohamed El-Nakib

1
这甚至不是Java吗?
BurakKarakuş2014年

@CJBS-re:This code seems to be for Visual Basic.NET表示IDE为Visual Studio
杰西·奇斯霍尔姆

@JesseChisholm-这就是我的意思。OP需要Java,而不是VB,并且目标是Eclipse IDE,而不是VS。
CJBS

1
RIP答案。如果他使用Visual Studio,他可能刚使用#region#endregion
PNDA
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.