Java에서 중괄호는 그 자체로 무엇을 의미합니까?
두 가지 방법으로 중괄호를 사용하는 Java 코드가 있습니다.
// Curly braces attached to an 'if' statement:
if(node.getId() != null)
{
node.getId().apply(this);
}
// Curly braces by themselves:
{
List<PExp> copy = new ArrayList<PExp>(node.getArgs());
for(PExp e : copy)
{
e.apply(this);
}
}
outAMethodExp(node);
첫 번째 if
문 다음에 나오는 독립형 중괄호 는 무엇을 의미합니까?
추가 중괄호의 유일한 목적은 범위 제한을 제공하는 것입니다. 는 List<PExp> copy
해당 중괄호 내에 만 존재하며 그 밖의 범위는 없습니다.
이것이 생성 된 코드 인 경우 코드 생성기가이 작업을 수행하므로 a를 몇 번 삽입했는지에 대해 걱정할 필요 List<PExp> copy
없이이 코드 조각이있는 경우 변수 이름을 바꿀 수있는 것에 대해 걱정할 필요없이 일부 코드를 삽입 할 수 있다고 가정합니다. 동일한 메서드에 두 번 이상 삽입됩니다.
두 번째로 matt b가 작성한 내용을 두 번째로 추가하겠습니다. 익명 중괄호의 또 다른 용도는 익명 클래스에서 암시 적 생성자를 선언하는 것입니다. 예를 들면 :
List<String> names = new ArrayList<String>() {
// I want to initialize this ArrayList instace in-line,
// but I can't define a constructor for an anonymous class:
{
add("Adam");
add("Eve");
}
};
일부 단위 테스트 프레임 워크는이 구문을 다른 수준으로 끌어 올려 완전히 컴파일 할 수없는 멋진 일을 허용합니다. 낯설어 보이기 때문에 저도 그렇게 큰 팬은 아니지만,이 사용을 통해 어떤 일이 벌어지고 있는지 적어도 인식하는 것은 가치가 있습니다.
범위 제한 답변에 동의하지만 한 가지 추가하겠습니다.
때로는 코드 섹션을 접는 것을 좋아하고 자동으로 중괄호를 접는 편집기가있는 사람들의 코드에서 이와 같은 구조를 볼 수 있습니다. 그들은 일반적으로 접히는 함수, 클래스, 루프 등에 속하지 않는 논리적 섹션에서 코드를 접는 데 사용합니다.
누군가가 else 문을 잊었다 고 생각합니다.
추가 블록 범위를 만드는 데 신경을 쓸 이유가 거의 없습니다. 이 경우와 대부분의 경우, 누군가 영리한 일을하고있는 것보다 제어문을 입력하는 것을 잊었을 가능성이 훨씬 더 높습니다.
그들은 내부 범위를 만듭니다. 이 중괄호 안에 선언 된 변수는 그 밖에 보이지 않습니다. 이것은 C / C ++에도 적용됩니다.
중괄호는 switch / case 문의 범위를 줄이는데도 유용합니다.
switch(foo) {
case BAR:
int i = ...
...
case BAZ:
int i = ... // error, "i" already defined in scope
}
하지만 당신은 쓸 수 있습니다
switch(foo) {
case BAR:{
int i = ...
...
}
case BAZ:{
int i = ... // OK
}
}
또한 초기화 블록 에도 사용됩니다 .
이 범위에서 선언 된 모든 항목이 중괄호 외부에 표시되지 않음을 의미하는 새 범위를 정의합니다.
흥미로운 점 : 중괄호는 실제로 선언문 클래스를 활성화합니다.
이것은 불법입니다. if(a) int f;
그러나 이것은 합법적입니다. if(a) { int f; }
이름없는 수준의 범위를 정의한 것 같습니다.
The bring a scope, copy will not be visible outside of it, so you can declare another variable with same name later. And it can be gathered by the garbage collector right after you exit that scope. In this case copy serves as a temporary variable, so it is a good example.
참고URL : https://stackoverflow.com/questions/241088/what-do-curly-braces-in-java-mean-by-themselves
'development' 카테고리의 다른 글
Angularjs를 사용하려면 node.js가 필요합니까? (0) | 2020.10.16 |
---|---|
자바 스크립트에서 const와 const {}의 차이점은 무엇입니까 (0) | 2020.10.16 |
줄의 n 번째 기호로 이동 (0) | 2020.10.16 |
여러 인수를 사용하는 명시 적 생성자 (0) | 2020.10.16 |
체스 엔진을 작성하는 데 좋은 리소스는 무엇입니까? (0) | 2020.10.16 |