错误"无法解决方法"

时间:2014-08-06 05:50:19

标签: java oop vector

我正在创建一个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;
    }
}

3 个答案:

答案 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);
}