【问题标题】:Cannot push an Integer object into an generic array无法将 Integer 对象推送到泛型数组中
【发布时间】:2013-06-07 05:55:15
【问题描述】:

我正在尝试将 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 是通用的...

【问题讨论】:

  • 你的Stack&lt;T&gt;.push打算做什么?我不清楚您是将item 推送到array 还是oneStack
  • 我会努力简化您的代码。我怀疑它不需要做你的代码所做的一半。
  • 我需要使用实现堆栈 ADT 的数组。

标签: java arrays generics


【解决方案1】:

push(a, oneStack);给了我由于某种原因找不到符号。

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

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

如果你想让它在不创建实例的情况下被调用,它需要是一个static 方法。 (我假设实际上还有更多代码。)

(如果您对 Java 很陌生,我建议您在担心泛型之前专注于真正的核心内容,例如调用方法和创建对象。您需要尽快解决它们,但如果您尝试在您仍然掌握最基本的知识时了解它们,从长远来看,它会减慢您的速度。)

【讨论】:

  • 栈是指栈对象还是只是用来访问栈类中的方法?
  • 啊,谢谢它的工作,似乎我需要实例化一个堆栈对象,即使我没有任何构造函数。
  • @david:你确实有一个构造函数:如果你没有明确指定任何构造函数,编译器会为你提供默认的公共无参数构造函数。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    方法 push 对 StackMain 类不可见(就像在 Stack 类中一样),除非您创建 Stack 的实例然后引用它。您应该将此方法本地化到 StackMain 类或创建 Stack 类的实例。

    【讨论】:

      猜你喜欢
      • 2020-04-29
      • 2018-07-20
      • 2020-11-16
      • 2020-12-20
      • 1970-01-01
      • 1970-01-01
      • 2020-10-11
      • 1970-01-01
      相关资源
      最近更新 更多