난 쓸수있다:
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);