【问题标题】:Java Array list stackJava 数组列表堆栈
【发布时间】:2014-02-13 20:37:06
【问题描述】:

这是我的 ArrayListStack 类的顶部。我试图使值成为 10 的 T 的数组列表。我收到错误“需要不兼容的类型:找到 ArrayListStack:java.util.ArrayList”。在行中 values = new ArrayList(10)"。我将如何正确设置此值,谢谢

 import java.util.ArrayList;

public class ArrayListStack<T> implements StackInterface<T> 
{
    private ArrayListStack<Integer> values= new ArrayListStack<Integer>();
    private int size;

    public ArrayListStack()
    {
        size = 0;
        values = new ArrayList<T>(10); 

    }

【问题讨论】:

  • 你检查过错误吗? values 甚至有不同的类型作为字段和构造函数。

标签: java arrays list stack


【解决方案1】:

我认为您正在尝试使用ArrayList 来支持您的ArrayListStackArrayListStack 包含另一个 ArrayListStack 是没有意义的。如果要编译,每个新的ArrayListStack 将创建另一个ArrayListStack,这将创建另一个ArrayListStack,等等。

values 的类型更改为ArrayList,并使用T 泛型类型参数:

private ArrayList<T> values;

这里不需要初始化;您正在构造函数中对其进行初始化。

【讨论】:

  • 我看他的代码后认为他打算扩展 ArrayList
  • @StormeHawke 可以这样做;这是创建ArrayListStack 的一种方式。但由于构造函数正在创建自己的ArrayList,我认为 OP 是为了组合而不是继承。
  • @StormeHawke 如果我试图将某些东西推入其中,这会给我一个错误,但它对数组列表不正确吗? public void push(T value) {value = values.add(size);大小++;}
【解决方案2】:

这里有多个错误:

  • 您将values 声明为ArrayListStack,而它应该是ArrayList
  • 您通过将类型参数指定为Integer 来声明values,而它应该保持T
  • 您在构造函数外部初始化values 以在构造函数内部再次初始化它
  • 您尝试使用不同的类型参数将values 初始化为不同的类型

应该是

private ArrayList<T> values;

ArrayStackList() {
  value = new ArrayList<T>(10);
}

【讨论】:

    【解决方案3】:

    您正在将泛型类型分配给 Integer 对象的数组列表。此外,您已经在类定义中初始化列表。

    【讨论】:

      【解决方案4】:
      public class ArrayListStack<T> implements StackInterface<T> 
      {
          private ArrayList<T> values; // <-- Note change here
          private int size;
      
          public ArrayListStack()
          {
              size = 0;
              values = new ArrayList<T>(10); 
          }
      }
      

      在构造和声明values 时,您需要具有相同的类型和泛型类型。 T 是您的泛型类型(如果您愿意,是泛型泛型类型)。我还删除了字段声明中多余的初始化,因为您正在构造函数中重新构造它。

      【讨论】:

      • 但是,如果我尝试在推送函数中向数组列表中添加一些内容,则会出现错误。 public void push(T value) {value = values.add(size);大小++;}。有什么特殊的方法我必须添加一些东西吗??
      • @user3071909, ArrayList.add 返回boolean,而不是T,并接受T,而不是int。你应该使用public void push(T value) { values.add(value); size++; }
      【解决方案5】:

      如果您尝试创建一个结合了ArrayListStackInterface 功能的类,请进行以下更改。否则你的代码似乎没有多大意义

      import java.util.ArrayList;
      
      public class ArrayListStack<T> extends ArrayList<T> implements StackInterface<T> 
      {
          public ArrayListStack()
          {
              //You can set this to whatever initial size you like, 
              //however if you look at the source code of ArrayList
              //you'll discover that 10 is the default size of an ArrayList
              super(10); 
          }
          //Add whatever methods are required by StackInterface
      }
      

      在这种情况下,您可以无缝地将您的课程用作标准 ArrayListStackInterface

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-06-12
        • 2014-03-13
        • 2014-12-03
        • 1970-01-01
        • 2017-06-14
        • 1970-01-01
        • 2010-10-24
        • 2020-10-24
        相关资源
        最近更新 更多