我有一个短课程:
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
}
答案 0 :(得分:2)
您没有说为什么要尝试将所有“int”转换为“T”,但我已经可以说:
您无法创建通用数组。您应该编写构造函数来获取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。