我正在尝试创建一个可以存储Number
类型的类似数组的对象。
我想将Object[] array
中的每个值初始化为0
。
如果我知道NegativeArray
正在存储Integer
s,
然后我可以做new Integer(0)
。
不幸的是,在处理泛型E
时,
我不知道如何创建值Number
的新0
。
这是我目前的实施:
package com.gly.sfs.util;
public class NegativeArray <E extends Number> {
private int firstIndex;
private int lastIndex;
private Object[] array;
public NegativeArray(int firstIndex, int lastIndex) {
this.firstIndex = firstIndex;
this.lastIndex = lastIndex;
boolean isValid = lastIndex > firstIndex;
if (!isValid) {
throw new IllegalArgumentException(
"lastIndex > firstIndex violated!");
}
array = new Object[size()];
}
public void set(int index, E e) {
checkIndexValidity(index);
array[getIndex(index)] = e;
}
public E get(int index) {
checkIndexValidity(index);
@SuppressWarnings("unchecked")
E e = (E) array[getIndex(index)];
return e;
}
public int size() {
return lastIndex - firstIndex;
}
private int getIndex(int index) {
return index - firstIndex;
}
private void checkIndexValidity(int index) {
boolean isValid = (index >= firstIndex) &
(index < lastIndex);
if (!isValid) {
throw new ArrayIndexOutOfBoundsException();
}
}
}
答案 0 :(得分:0)
您需要的不仅仅是E
:您需要一份单独的合同,其中E
具有getZero()
方法,或者您需要单独接受getZero
方法。< / p>
在Java 8中,除了构造函数中的其他参数之外,您还可以接受Supplier< E >
,并且可以为常见的Supplier
子类提供一些库存Number
。< / p>
在Java 7及更早版本中,您可以手动定义ZeroSupplier<E>
接口。