如果您对故事不感兴趣,请跳过前两段。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。” - 这是一个非常正确的观察。如果你有一个大小为0的'GeniusArray'并且说'geniusArray [0]。foo()',程序仍然会崩溃,但是可调试的'NullPointerException'少得多,而不是更通信的'ArrayIndexOutOfBoundsException'。返回'null'永远不是处理编程错误的方式 - 抛出是。 – gustafc 2009-10-14 07:59:53
C和C++的真正问题,正如你所说的Objective C一样,它们没有检测到索引超出范围。所以,而不是一个保证崩溃的事情会发生。这更糟糕,例如它会导致所有这些缓冲区溢出安全漏洞。 – starblue 2009-10-14 08:44:17