나는 최근에 정적 ArrayList를 초기화하기위한 새로운 문법으로 나에게 보이는 것을 발견했다 :
new ArrayList() {{ add("first"); add("second"); }};
정말 ArrayList를 초기화에 {{구문합니까 무엇
내 질문은, 정말 무슨 일을 그곳에? 그 정적 블록을 정의하기위한 지름길 (나는 그것이 static
키워드가 필요하다고 생각)인가? 아니면 그냥 기본 생성자를 정의하는 방법? 다른 것? 어떤 Java 버전이 유효합니까?
추가 설명에 대한 설명과 링크는 크게 감사하겠습니다.
편집 : 이니셜 라이저 블록이 생성자 전후에 실행되는지 여부를 보여주는 내 테스트 클래스.
import org.junit.Test;
public class InitializerBlockTest {
class InitializerTest {
{
System.out.println("Running initalizer block");
}
public InitializerTest() {
System.out.println("Running default constructor");
}
}
class SubClass extends InitializerTest {
{
System.out.println("Running subclass Initializer block");
}
public SubClass() {
System.out.println("Running subclass constructor");
}
}
@Test
public void testIt() {
new SubClass();
}
}
출력 : 당신은 ArrayList를 새로운 익명 서브 클래스를 만드는
Running initalizer block
Running default constructor
Running subclass Initializer block
Running subclass constructor
어디에서이 새로운 구문을 찾았습니까? 기사 또는 공유 할 항목에 대한 링크가 있습니까? – romacafe
BTW : 혼란에 빠지면 클래스의 임의의 위치에 정적 ({} 및 {}) 블록을 얼마든지 가질 수 있습니다 (물론 메서드 정의 외부) –
관련 : http://stackoverflow.com/questions/924285/efficiency- of-java-double-brace-initialization 그것은 새로운 것은 아닙니다. 이미 여러 해 동안 자바로 왔습니다. 그것은 실제로 거의 사용되지 않으며 좋은 이유가 있습니다. – BalusC