我经历了他们所创建的输出流的一个开源项目,并遇到下列方法来:Java数组长度小于0?
@Override public void write(byte[] buffer, int offset, int length) {
if (buffer == null) {
throw new NullPointerException("buffer is null");
}
if (buffer.length < 0) { // NOTE HERE
throw new IllegalArgumentException("buffer length < 0");
}
if (offset < 0) {
throw new IndexOutOfBoundsException(String.format("offset %d < 0", offset));
}
if (length < 0) {
throw new IndexOutOfBoundsException(String.format("length %d < 0", length));
}
if (offset > buffer.length || length > buffer.length - offset) {
throw new IndexOutOfBoundsException(String.format("offset %d + length %d > buffer" " length %d", offset, length, buffer.length));
}
}
所以byte[] buffer
只是一个普通的老byte[]
。我们知道它不是空的。它甚至有可能使它的长度小于0吗?喜欢,可以用反射完成,这就是他们所防范的?
你是什么意思“我们知道它不是'null'”? – 2012-07-17 20:02:05
@EdwardThomson:我认为是因为第一条语句检查'buffer == null' – 2012-07-17 20:02:51
也许在该项目的其他地方,它是一个约定,'-1'是一种有效的方式来表示索引是无效的或类似的这里终于变成了一个例外。 – thalador 2012-07-17 20:03:28