2013-06-07 5 views
1

Я пытаюсь нажать Integer на общий массив. Вот мой код:Нельзя вытолкнуть объект Integer в общий массив

import java.lang.reflect.Array; 

public class StackMain 
{ 
    public void main (String[]args) 
    { 
     Integer[] oneStack = null; 
     Integer a = new Integer("1"); 

     oneStack = (Integer[])Array.newInstance(Integer.class, 10); 

     push(a, oneStack); 
    } 
} 


public class Stack<T> 
{ 
    private T[] oneStack; 

    public void push(T item, T[] array) 
    { 
     array[1] = item; //dummy method for testing  
    } 
} 

Но push(a, oneStack) дает мне «не может найти символ» ошибка по какой-то причине. Должен ли я использовать Integer[] вместо T[]? Я думал, что Integer был общим ...

+0

Что ваш 'Stack .push' намеревается сделать? Мне непонятно, хотите ли вы нажать 'item' на' array' или 'oneStack'. – Haozhun

+0

Я бы работал над упрощением кода. Я подозреваю, что вам не нужно делать половину того, что делает ваш код. –

+0

Мне нужно использовать массив, который реализует стек ADT. – david

ответ

5

push (a, oneStack); дает мне по какой-то причине не найти символ.

Да потому, что вы пытаетесь вызвать его в StackMain, и она существует только в Stack<T>. Вам нужно создать Stack<Integer> для того, чтобы назвать его:

Stack<Integer> stack = new Stack<Integer>(); 
stack.push(a, oneStack); 

Если вы хотите, чтобы позволить ему быть вызван без создания экземпляра, он должен быть static метод. (Я предполагаю, что на самом деле есть больше кода.)

(Если вы очень новичок в Java, я бы посоветовал сосредоточиться на действительно основных вещах, таких как вызов методов и создание объектов, прежде чем вы будете беспокоиться о дженериках Вам нужно будет быстро их решить, но если вы попытаетесь узнать о них, пока вы все еще справляетесь с самыми основными принципами, это замедлит вас в долгосрочной перспективе.)

+0

Мне нужен конструктор? – david

+0

ли стек ссылается на объект стека или он просто используется для доступа к методу в классе стека? – david

+0

ах благодаря его работе, мне кажется, что мне нужно создать экземпляр объекта стека, хотя у меня не было конструктора. – david

0

Вам необходимо создайте экземпляр вашего объекта стека до вызова метода push (...) на нем

0

Метод push не отображается классу StackMain (как и в классе Stack), если вы не создаете экземпляр Stack, а затем обратитесь Это. Либо вы должны локализовать этот метод в классе StackMain, либо создать экземпляр класса Stack.