Я написал общий класс, а ниже - конструктор класса. Я хочу сделать что-то вроде этого, как написано в строкеLjava.lang.Object; не может быть применено к [Ljava.lang.Integer
elements = (E[])new Object[size]
Потому что я не знаю общего типа на время выполнения поэтому он будет бросать исключение.
public class Stack<E> implements IStack<E> {
protected E[] elements = null;
protected int top = -1;
protected int size= 0;
private static final int DEFAULT_CAPACITY = 10;
public Stack(){
this(DEFAULT_CAPACITY);
}
public Stack(int size){
if(size <0){
throw new IllegalArgumentException("Initial capacity cannot be negative or zero");
}
ArrayList<Integer> ar = new ArrayList<Integer>();
elements = (E[])new Object[size];
}
}
Есть ли способ решить такие проблемы? Декларация Е
protected E[] elements = null;
Это, как я пытаюсь вызвать
Random ran = new Random();
Stack<Integer> st = new Stack<Integer>();
st.push(ran.nextInt(100));
Update Ребята, спасибо за помощь. Я возился с дженериками, поэтому проблема создавалась. Вот весь код, который создал проблему -
public class StackMain {
public static void main(String[] args) {
MinMaxStack minMaxStack = new MinMaxStack();
Random ran = new Random();
for (int k = 0; k < 10; k++) {
minMaxStack.push(ran.nextInt(100));
}
System.out.println(minMaxStack);
}
}
public class MinMaxStack extends Stack<Integer> implements IMinMaxStack<Integer>{
private int min;
private int max;
/*
* Approach 1:
* For push method we can push and update the minimum/maximum value
* For pop method we will be traversing whole stack to find out the new minimum/maximum
*
*/
@Override
public void push(Integer element){
if(isEmpty()){
this.min = element;
this.max = element;
elements[top+1] = element;
size++;
}else{
if(element < min){
min = element;
}
if(element > max){
max = element;
}
elements[top+1] = element;
size++;
}
}
}
public class Stack<E> implements IStack<E> {
protected E[] elements = null;
protected int top = -1;
protected int size= 0;
private static final int DEFAULT_CAPACITY = 10;
public Stack(){
this(DEFAULT_CAPACITY);
}
public Stack(int size){
if(size <0){
throw new IllegalArgumentException("Initial capacity cannot be negative or zero");
}
elements = (E[])new Object[size];
}
public void push(E element) {
ensureCapacity();
elements[top+1] = element;
size++;
}
}
public interface IStack<E> {
public void push(E element);
}
public interface IMinMaxStack<E> extends IStack<E> {
public int min();
public int max();
}
Update 2: Кажется, кроме прохождения типа класса, как упоминалось в ответ ниже, нет никакого способа, мы можем сделать это.
Как 'elements' объявлен? – lea
@lea protected E [] elements = null; – Avneesh
@tobias_k Даже если я это сделаю, все же основные проблемы остаются тем, что я пытаюсь решить здесь. – Avneesh