[java] 선언이 아닌 경우 배열 초기화 구문

난 쓸수있다:

AClass[] array = {object1, object2}

나는 또한 쓸 수 있습니다 :

AClass[] array = new AClass[2];
...
array[0] = object1;
array[1] = object2;

그러나 나는 쓸 수 없다 :

AClass[] array;
...
array = {object1, object2};

Java로 차단되는 이유는 무엇입니까?

나는 그 문제를 해결하는 방법을 알고 있지만 때때로 더 간단합니다.

예를 들면 다음과 같습니다.

public void selectedPointsToMove(cpVect coord) {

    if (tab == null) {
        if (arePointsClose(coord, point1, 10)) {
            cpVect[] tempTab = {point1};
            tab = tempTab;
        } else if (arePointsClose(point2, coord, 10)) {
            cpVect[] tempTab = {point2};
            tab = tempTab;
        } else {
            cpVect[] tempTab = {point1,point2};
            tab = tempTab;
        }
    }
}

Java에서 배열로 재생하는 방법을 배운 이래로 간단한 버그가 발생했습니다.



답변

Java로 차단되는 이유는 무엇입니까?

Java 디자이너에게 문의해야합니다. 제한에 대한 미묘한 문법적 이유가있을 수 있습니다. 배열 생성 / 초기화 구성 중 일부는 Java 1.0에없고 (IIRC)는 Java 1.1에 추가되었습니다.

그러나 “왜”는 중요하지 않습니다 … 제한이 있으며, 그와 함께 살아야합니다.

나는 그 문제를 해결하는 방법을 알고 있지만 때때로 더 간단합니다.

당신은 이것을 쓸 수 있습니다 :

AClass[] array;
...
array = new AClass[]{object1, object2};


답변

이유 질문에 대답하려고합니다 .Java 배열은 ArrayList와 같은 클래스에 비해 매우 간단하고 초보적입니다. Java는 선언시 배열에 할당해야 할 메모리 양을 알고 싶어합니다. ArrayList는 훨씬 더 동적이며 시간에 따라 크기가 달라질 수 있습니다.

배열을 2의 길이로 초기화하고 나중에 3의 길이가 필요하다는 것을 알게되면 가지고있는 것을 버리고 완전히 새로운 배열을 만들어야합니다. 따라서 ‘새’키워드.

처음 두 예제에서는 선언 할 때 할당 할 메모리 양을 알려줍니다. 세 번째 예에서 배열 이름은 전혀 포인터가 아니므로 초기화 될 때 적절한 양의 메모리를 할당하기 위해 새 배열을 명시 적으로 만들어야합니다.

나는 첫 번째 예를 말한다 (그리고 누군가가 더 잘 알고 있다면 나를 교정하십시오)

AClass[] array = {object1, object2}

실제로 의미

AClass[] array = new AClass[]{object1, object2};

그러나 Java 디자이너가 한 것은 선언시 배열을 만들면 더 빨리 작성하는 것입니다.

제안 된 해결 방법이 좋습니다. 런타임시 시간 또는 메모리 사용량이 중요한 경우 배열을 사용하십시오. 중요하지 않고 이해하고 작업하기 쉬운 코드를 원할 경우 ArrayList를 사용하십시오.


답변

이유 부분에 대답 할 수 없습니다.

그러나 역동적 인 것을 원한다면 Collection ArrayList를 고려하지 마십시오.

ArrrayList는 모든 Object 유형이 될 수 있습니다.

그리고 강제로 배열로 원한다면 toArray () 메소드를 사용할 수 있습니다.

예를 들면 다음과 같습니다.

            ArrayList<String> al = new ArrayList<String>();
            al.add("one");
            al.add("two");
            String[] strArray = (String[]) al.toArray(new String[0]);

이것이 도움이되기를 바랍니다.


답변

이 괴물 같은 new AClass[] { ... }구문 을 좋아하지 않는 사람들에게는 설탕이 있습니다.

public AClass[] c(AClass... arr) { return arr; }

이 작은 기능을 원하는대로 사용하십시오.

AClass[] array;
...
array = c(object1, object2);


답변