【问题标题】:Creating an Array object with generics使用泛型创建 Array 对象
【发布时间】:2017-10-23 08:10:01
【问题描述】:

所以我正在尝试创建一个简单的程序,允许我将 Int、String、double.... 的数组放入一个对象并打印它:

public class Array<E> {

    private E[] data;
    private int size;

    public Array(int size, E[] data)
    {
        this.size=size;
        for(int i=0; i<size; i++) this.data[i]=data[i];
    }

    public String toString()
    {
        String s=new String();
        for(int i=0; i<size; i++) s+=data[i]+" ";
        return s;
    }
}

public class Main {

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        int A[]= {1, 3, 5, 7};
        Array<Integer> niza=new Array<Integer>(4, A);
        System.out.println(niza.toString());
    }

}

但是,每当我尝试创建对象时,它都会给我这个错误:

线程“main”java.lang.Error 中的异常:未解决的编译问题: 构造函数 Array(int, int[]) 未定义

at test.Main.main(Main.java:8)

对导致问题的原因和可能的解决方案有任何想法吗?

提前致谢!

【问题讨论】:

  • 声明你的数组是这样的:Integer A[]= {1, 3, 5, 7};
  • 不,它仍然无法正常工作。
  • @AndrewTobilko 这是他自己的......但目前的问题在 Jens 的回答中得到了解释,由于this.data 为空,他现在有 NPE

标签: java arrays generics


【解决方案1】:

问题是

    int A[]= {1, 3, 5, 7};
    Array<Integer> niza=new Array<Integer>(4, A);

声明ints 的数组,而构造函数需要Integer[]int 是基本类型,与Integer 不同。编译器在可能和需要时在intInteger 之间进行转换,but this conversion is not defined for arrays.

如果您将数组声明为

    Integer A[]= {1, 3, 5, 7};
    Array<Integer> niza=new Array<Integer>(4, A);

your code will compile, but fail with a NullPointerException 因为成员 data 未初始化。 You can easily fix that with

private final E[] data;

public Array(int size, E[] data)
{
    this.size=size;
    this.data = Arrays.copyOf(data, size);
}

虽然我更喜欢使用 ArrayList 而不是数组...

【讨论】:

  • 是的,这正是我所做的,但它因 NullPointerException 而失败。为什么要这样做?
  • 您的data 字段未初始化。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-05-21
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
  • 2012-03-13
  • 2021-10-10
  • 1970-01-01
相关资源
最近更新 更多