Если вам не интересна история, пропустите первые 2 абзаца.Subclassing Array
Я говорил с другом о массивах и почему они (все еще) сбой, если вы пытаетесь получить доступ к объекту, который находится за пределами «современных» языков, таких как Objective C (Это мой основной язык). Поэтому мы вошли в дебаты, и я сказал, что могу написать ему массив (я назвал его GeniusArray), который возвращает null и выводит ошибку, если вы пытаетесь получить доступ к чему-то за пределами, но не сбой.
После того, как я проспал, я понял, что если вы обращаетесь к элементам, находящимся за пределами границ, у вас есть серьезные ошибки в вашем коде, и это может быть неплохо для приложения, чтобы сбой, поэтому вы вынуждены его исправлять. :-D
Но все-таки: я хотел бы, чтобы доказать свою точку зрения и подкласс массива и переопределить метод Get() по сути, добавив этот, если утверждение, что каждый программист пишет относительно часто:
// Pseudo code...
if (index < array.count) element= array[index];
Я хочу сделать это на Java, а не на Objective C, потому что это то, что мой друг «знает» (кстати, мы оба учащиеся).
Чтобы сократить длинную историю, я попытался подклассифицировать массив, но он, похоже, не работает. Я получить тины это: ограничение
доступа: Тип Attribute.Array не доступен из-за с ограничением требуемой библиотеки: /System/Library/Frameworks/JavaVM.framework/Versions/1.6.0 /Classes/classes.jar GeniusArray.java
«Я понял, что если вы обращаетесь к элементам, находящимся за пределами границ, у вас есть серьезные ошибки в вашем коде, и это может быть неплохо для приложения, чтобы сбой, поэтому вы вынуждены его исправлять.: -D» - это очень правильное наблюдение. Если у вас был «GeniusArray» размером 0 и сказал «geniusArray [0].foo() ', программа все равно будет терпеть крах, но с гораздо менее отлажимым« NullPointerException », а не более коммуникативным« ArrayIndexOutOfBoundsException ». Возвращение «null» никогда не является способом обработки ошибки программирования - метать. – gustafc
Реальная проблема с C и C++, и, как вы говорите, Objective C, заключается в том, что они не обнаруживают, что индекс за пределами границ. Поэтому, чем гарантированный сбой, все может случиться. Это намного хуже, например, он вызывает все эти отверстия для предотвращения переполнения буфера. – starblue