2012-04-11 2 views
0

Можно создать дубликат:
Java how to: Generic Array creationстек общий класс не работает

import java.util.EmptyStackException; 
import java.util.Vector; 

public class Stack<E> extends Vector<E> { 
    private E a[]; 
    private int top; 

    public void Stack() { 
     a = new E[100]; 
     top = -1; 
    } 

    public void Stack(int n) { 
     a = new E[n]; 
     top = -1; 
    } 

    public E pop() { 
     E obj; 
     int len = size(); 
     if (top == -1) 
      throw new EmptyStackException(); 
     else 
      obj = a[top--]; 
     return obj; 
    } 

    public void push(E e) { 
     if (e == null) 
      throw new NullPointerException(); 
     else if (top == size() - 1) 
      System.out.println("Stack full"); 
     else { 
      a[++top] = e; 
      System.out.println("pushed :" + e); 
     } 

    } 

    public int size() { 
     int i; 
     for (i = 0; a[i] != null; i++) 
      ; 
     return i; 
    } 

} 

Это мой стек дженерики класс в Java. Я получаю ошибку в объявлении массива внутри двух конструкторов i.e Stack() и Stack (int n). В обоих случаях ошибка - это «создание общего массива». пожалуйста, помогите

+4

Пожалуйста, смотрите на этот вопрос: http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation – Mat

+0

Ваши конструкторы на самом деле не конструкторы, а конструкторы не имеют типа возвращаемого значения , Кроме того, вы расширяете 'Vector', что означает, что вам не нужно иметь локальный массив. – Paaske

ответ

1

Общий массив не может быть создан. поэтому используйте массив объектов.


import java.io.*; 
import java.util.EmptyStackException; 
import java.util.Vector; 
public class Stack extends Vector 
{ 
    private Object a[]; 
    private int top; 
    public void Stack() 
    { 
    a=new Object[100]; 
    top=-1; 
    } 
    public void Stack(int n) 
    { 
    a=new Object[n]; 
    top=-1; 
    } 
    public E pop() 
    { 
    E obj; 
    int len = size(); 
    if (top == -1) 
     throw new EmptyStackException(); 
    else 
     obj=(E) a[top--]; 
    return obj; 
    } 
    public void push(E e) 
    { 
    if(e==null) 
     throw new NullPointerException(); 
    else if(top==size()-1) 
     System.out.println("Stack full"); 
    else 
    { 
     a[++top]=e; 
     System.out.println("pushed :"+e); 
    } 


} 
public int size() 
{ 
    int i; 
    for(i=0;a[i]!=null;i++); 
    return i; 
} 
} 
+0

Общий массив, безусловно, может быть создан. См. Другие ответы. Но использование 'Object []' тоже нормально. – Paaske

+0

Что делает объект []? Может ли он хранить hetrogenous datas ?? – rick

1

У вас нет конструкторов в вашем классе, это методы. для конструкторов удалить тип void. Конструкторы не имеют типов возврата. Кроме того, имя вашего класса начинается с нижнего стека слов, а конструкторы начинаются с Stack. Переименуйте свой класс в Stack и удалите типы void.

Вы должны сделать это так

 public Stack(Class<E> cls) 
{ 
     a = (E[]) Array.newInstance(cls); 

    top=-1; 
} 

public Stack(Class<E> cls,int n) 
    { 
    a = (E[]) Array.newInstance(cls,n); 
    top=-1; 
    } 

см Generic Array

Ниже ваш рабочий класс с созданием объекта в основной метод.

class Stack<E> extends Vector<E> { 
    private E a[]; 
    private int top; 

    public Stack(Class<E> cls) 
    { 


     a = (E[]) Array.newInstance(cls); 

     top=-1; 
    } 

    public Stack(Class<E> cls,int n) 
    { 


     a = (E[]) Array.newInstance(cls,n); 

     top=-1; 
    } 

    public E pop() { 
     E obj; 
     int len = size(); 
     if (top == -1) 
      throw new EmptyStackException(); 
     else 
      obj = a[top--]; 
     return obj; 
    } 

    public void push(E e) { 
     if (e == null) 
      throw new NullPointerException(); 
     else if (top == size() - 1) 
      System.out.println("Stack full"); 
     else { 
      a[++top] = e; 
      System.out.println("pushed :" + e); 
     } 

    } 

    public int size() { 
     int i; 
     for (i = 0; a[i] != null; i++) 
      ; 
     return i; 
    } 

    public static void main(String...strings){ 
     Stack<Integer> st=new Stack<Integer>(Integer.class,n); 
    } 

} 
+0

Какими будут параметры при создании объекта? – rick

+0

стек stack = новый стек (String.class); – Shehzad

+0

Я отредактировал мой ответ – Shehzad

Смежные вопросы