无法将Integer对象推送到通用数组中

时间:2013-06-07 05:55:16

标签: java arrays generics

我正在尝试将Integer推送到通用数组。这是我的代码:

import java.lang.reflect.Array;

public class StackMain
{
    public void main (String[]args)
    {
        Integer[] oneStack = null;
        Integer a = new Integer("1");

        oneStack = (Integer[])Array.newInstance(Integer.class, 10);

        push(a, oneStack);
    }
}


public class Stack<T>
{
    private T[] oneStack;

    public void push(T item, T[] array)
    {
        array[1] = item; //dummy method for testing    
    }
}

但是push(a, oneStack)由于某种原因给了我一个“找不到符号”的错误。我应该使用Integer[]代替T[]吗?我认为Integer是一个通用的......

3 个答案:

答案 0 :(得分:5)

  

push(a,oneStack);由于某种原因,我无法找到符号。

是的,因为您试图在StackMain中调用它,它只存在于Stack<T>中。您需要创建一个Stack<Integer>才能调用它:

Stack<Integer> stack = new Stack<Integer>();
stack.push(a, oneStack);

如果要在不创建实例的情况下允许调用它,则需要使用static方法。 (我假设现实中有更多的代码。)

(如果你是Java的新手,我建议你专注于真正的核心内容,比如在你担心泛型之前调用方法和创建对象。你需要尽快解决它们,但如果你试图在你仍然掌握基础知识的同时了解它们,从长远来看它会减慢你的速度。)

答案 1 :(得分:0)

您需要在调用push(...)方法之前创建堆栈对象的实例

答案 2 :(得分:0)

方法push对于StackMain类是不可见的(因为它在Stack类中),除非您创建Stack的实例然后引用它。您应该将此方法本地化为StackMain类,或者创建Stack类的实例。