如何在java中为泛型类定义整数变量?

时间:2014-07-01 19:45:03

标签: java

我有一个短课程:

public class Stack {

private int[] data;
private int Top;

Public Stack(int size) {

   data = new int[size];
   top = -1;

}

public void Push (int value) {

   top++;
   data[top] = value;

}

public int pop() {

   return data[top--];

}

public int top() {

   return data[top];

}

我得到一堆错误"无法从int转换为T" ... 并且还在构造函数的数组定义中出错...

这是我的代码,我是初学者,请帮助我理解这一点:

public class Stack <T> {


    private T[] data;
    private T top;

    Public Stack(T size) {

    data = new T[size];// im getting error here "cannot create a generic array of T...
    top = -1; // what should I do with this?

    }

    public void Push (T value) {

    top++; //cannot convert from int to T
    data[top] = value; //cannot convert from int to T

    }

    public T pop() {

    return data[top--]; //cannot convert from int to T

    }

    public T top() {

    return data[top]; //cannot convert from int to T

   }

2 个答案:

答案 0 :(得分:2)

您没有说为什么要尝试将所有“int”转换为“T”,但我已经可以说:

  • “public”(构造函数的可见性)应该没有资本。
  • 您的变量“top”必须是int:无论类型为T,变量top都是索引。
  • 您无法创建通用数组。您应该编写构造函数来获取T的数组。

    ,而不是给构造函数赋予大小
    public class Stack<T> {
    
        private final T[] data;
        private int top;
    
        public Stack(final T[] data) {
            this.data = data;
            top = -1;
        }
    
        public void Push(final T value) {
            top++;
            data[top] = value;
        }
    
        public T pop() {
            return data[top--];
        }
    
        public T top() {
            return data[top];
        }
    }
    

编辑:我还在“数据”字段中添加了“最终”,因为我总是声明“最终”我能做的一切。

答案 1 :(得分:1)

您的top变量用于存储表示堆栈顶部的数组的索引。它并不意味着存储任何实际数据;它只是一个索引。因此,在使Stack类成为通用时,不应将其转换为T类型。它应该保持int

构造函数size的参数也必须是int类型。至于创建通用数组,请参阅How to: generic array creation