我正在创建一个Vector
课程用于教育目的。本课程有标准的getter& setters,现在我想添加对添加两个向量的支持。
当我尝试拨打result.setVectorValue
时,我收到错误无法解析方法setVectorValue 。我怎样才能克服麻烦?
以下是我班级的完整代码:
public class Vector <T1> {
private T1[] vectorArray;
public Vector(){
}
public Vector(T1[] a){
this.vectorArray = a;
}
public void setVector(T1[] a){
this.vectorArray = a;
}
public void setVectorValue(T1 value, int index){
this.vectorArray[index] = value;
}
public T1[] getVector(){
return this.vectorArray;
}
public T1 getVectorValue(int index){
return this.vectorArray[index];
}
public int getVectorLength(){
return this.vectorArray.length;
}
public String toString() {
if (vectorArray == null)
return null;
return vectorArray.getClass().getName() + " " + vectorArray;
}
public T1[] plus(T1[] inputVector, T1[] whatToPlusVector){
Vector <T1> result = new Vector<T1>();
int index=0;
for(T1 element : inputVector){
result.setVectorValue(element, index);
index++;
}
for(T1 element : whatToPlusVector){
result.setVectorValue(element, index);
index++;
}
return result;
}
}
答案 0 :(得分:2)
你的无参数构造函数(采用零参数的构造函数)不会初始化内部vectorArray
。如果使用no-arg构造函数,则vectorArray
将保持null
。在plus()
方法中,您使用no-arg构造函数,因此您无法设置此result
向量的任何元素。您应该使用长度为:
int length = inputVector.getVectorLength() + whatToPlusVector.getVectorLength();
由于数组必须是通用类型T1
,因此非常棘手。你不能只写new T1[length]
。
对于通用阵列创建,请参阅: How to create a generic array in Java?
因此,在您的plus()
方法中,您应该这样做:
int length = inputVector.getVectorLength() + whatToPlusVector.getVectorLength();
// You need the class of T1 to be able to create an array of it:
Class<?> clazz = inputVector.getVector().getClass().getComponentType();
T1[] array=(T[])Array.newInstance(clazz, length);
Vector <T1> result = new Vector<>(array);
// And the rest of your plus() method.
最后:声明您的plus()
方法返回T1[]
,因此返回result.getVector()
或声明它返回Vector<T1>
,然后您可以返回{{1}类型为result
的局部变量。
答案 1 :(得分:1)
对于错误&#39;无法解析方法setVectorValue&#39;,可能是该类与java.util.Vector混淆。
更改班级名称&#39; Vector&#39; to&#39; VectorExample&#39;什么的,然后再试一次。
答案 2 :(得分:0)
我希望NullPointerException
vectorArray
未在默认构造函数中初始化,并且在plus()
方法中调用默认构造函数,而setVector()
则不会。因此,在setVectorValue()
中,您将获得NPE
。
plus()
中的返回类型不匹配也存在问题。它应该是Vector <T1>
而不是T1[]
。
示例代码测试NPE
public static void main(String[] args) {
Vector<String> v = new Vector<String>();
String[] v1 = {"Str1"};
String[] v2 = {"Str2"};
v = v.plus(v1, v2);
System.out.println(v);
}