Java 在集合初始化时赋值
大家讲道理
大家讲道理 2017-04-18 09:22:24
0
3
356
List<String> list = new ArrayList<String>(){
            {
                add("hello");
                remove(0);
            }
        };
map = new HashMap<String, Object>(){
            {
                put("name","123");
            }
        };

请问这个语法是来自 Java 几?他的原理又是什么?一个大括号我知道是匿名内部类,但是里面的大括号不知道是什么意思??

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

모든 응답(3)
PHPzhong

이 구문을 Java의 동적 초기화 블록이라고 합니다.

클래스 내에서 중괄호로 묶인 코드 조각으로, 클래스가 인스턴스화될 때 자동으로 호출됩니다.

예:

으아악

그런 다음 new Person()이 호출되면 123이 인쇄됩니다.

질문하신 코드의 경우 동적 초기화 블록이 익명 클래스에 배치되어 있어 조금 이상하고 이해하기 어려워 보입니다. 하지만 결국 익명 클래스도 클래스이므로 합법적입니다. 결과적으로 익명 클래스가 인스턴스화되면 해당 코드가 실행되고 여러 요소가 컬렉션에 추가됩니다. 이는 컬렉션을 초기화하는 것과 같습니다.

어떤 Java 버전부터 지원했는지는 잘 기억나지 않지만 오래전부터 지원한 것으로 추정되며 Java 5부터 지원해야 할 것 같습니다.

마지막으로 이런 방식으로 컬렉션을 초기화하는 것은 마치 흑마법처럼 보입니다.

또한 정적 초기화 블록을 확인하여 차이점을 비교할 수도 있습니다.

巴扎黑

안의 중괄호는 초기화 블록으로, 새

의 생성자 호출 사이에 실행됩니다.
黄舟

중괄호는 익명의 내부 클래스가 아니라 생성 방법 이전에 실행되는 것으로 보이는 생성 코드 블록입니다(명확하게 기억나지 않습니다). 생성 방법과 같은 것으로 간주합니다.

최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿