이야기에 흥미가 없다면 처음 두 단락을 건너 뛰십시오.서브 클래 싱 배열
나는 배열에 대해 친구와 이야기하고 있었고 Objective C와 같은 범위 밖의 객체에 액세스하려고 시도하는 이유는 무엇입니까 (내 주요 언어 임). 그래서 우리는 논쟁을 벌였습니다. 그리고 나는 그에게 당신이 범위를 벗어나지 만 충돌을 일으키지 않는다면 null을 반환하고 오류를 출력하는 Array (GeniusArray로 이름지었습니다)를 작성할 수 있다고 말했습니다.
잠자다가 넘어지면 경계에서 벗어난 요소에 액세스하는 경우 코드에 심각한 오류가 발생하고 응용 프로그램이 다운되지 않아서 문제를 해결할 수 있습니다. - D
하지만 여전히 : 내 지점을 증명하고 배열을 서브 클래스 화해, 문이 모든 프로그래머가 비교적 자주 쓰는 경우 기본적으로이 일을 추가하여 GET() 메소드를 오버라이드 (override)하고 싶습니다 :
// Pseudo code...
if (index < array.count) element= array[index];
나는 그것이 나의 친구가 "아는"것입니다 (btw, 우리는 두 학생이기 때문에) Objective C가 아닌 Java로하고 싶습니다.
긴 이야기를 짧게 자르기 : Array를 서브 클래스하려고했지만 작동하지 않습니다.
액세스 제한 : 유형 Attribute.Array 필요한 라이브러리에 제한을 인해 액세스 할 수 없습니다 : /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0 나는 팅이를 얻을 수있어 /Classes/classes.jar GeniusArray.java
"범위를 벗어나는 요소에 액세스하는 경우 코드에 심각한 오류가 있으며 응용 프로그램이 다운되지 않아서 문제를 해결할 수 있음을 알았습니다. :-D"- 이것은 아주 정확한 관찰. 만약 당신이'GeniusArray'의 사이즈가 0이고'geniusArray [0].foo()'를 호출하면 프로그램은 계속 충돌하지만보다 의사 소통하기 쉬운 ArrayIndexOutOfBoundsException보다는 디버그가 가능한'NullPointerException'을 사용합니다. 'null '을 반환하는 것은 결코 프로그래밍 오류를 처리하는 방법이 아닙니다. – gustafc
C 및 C++의 실제 문제는 Objective C가 말한 것처럼 인덱스가 범위를 벗어난 것을 감지하지 못한다는 것입니다. 따라서 보장 된 충돌보다는 무엇이든 일어날 수 있습니다. 이것은 훨씬 더 심각합니다. 예를 들어 모든 버퍼 오버플로 보안 구멍이 발생합니다. – starblue