2016-07-09 3 views
0

У меня возникли проблемы с доступом к методу в классе ItemType из Stack of ItemTypes.Доступ к методам ItemType в Stack

Мой класс ItemType очень просто

public class SteveItemType{ 

    private String name; 


    public SteveItemType(String name){ 
    this.name = name; 
    } 
     public String getName(){ 
    return this.name; 
    } 

    } 

Мой метод ToString из моего класса Stack:

public String toString(){ 
     return stack[top].getName(); } 

Это где скрывается моя ошибка. Я верю, Что хранится в моем стек не тип объекта (который отключив меня от доступа к моему методу GetName)

Моих Bounded Stack Конструкторы:

public ArrayStack(){ 
     stack = (SteveItemType[]) new Object[default_cap]; } 

    public ArrayStack(int n){ 
     stack = (SteveItemType[]) new Object[n]; } 

Наконец в моем приложении, это то, как я я толкая мой ItemType & создавая свой стек:

ArrayStack stack = new ArrayStack<SteveItemType>(n); 

stack.push(new SteveItemType("Steve")); 

Моя ошибка является

> ArrayStack.java:59: error: cannot find symbol 
>   return stack[top].getName(); 

Пожалуйста, если кто-нибудь может объяснить, почему/где моя логика/мышление неправильны, я очень ценю это, мои извинения за все движущиеся части, которые я стараюсь сделать максимально точными.

(я не могу получить доступ к моему методу GetName)

+2

Вы упустили много соответствующего кода. Где объявляется 'stack'? Что такое 'top'? – shmosel

+0

'(SteveItemType []) new Object [default_cap]' должен вызывать 'ClassCastException'. – shmosel

+0

Не могли бы вы разместить сообщение 'ArrayStack.java'? –

ответ

1

могли бы вы следующий фрагмент кода, применяемого в ArrayStack.java:

public class ArrayStack<T extends SteveItemType> { 

private SteveItemType[] stack; 
private int top;  
private int default_cap=5; 

public ArrayStack(){ 
     stack = new SteveItemType[default_cap]; 
    } 

public ArrayStack(int size) { 
    this.stack = new SteveItemType[size]; 
    } 

public String toString(){ 
     return stack[top].getName(); 
    } 

public void push(T t){ 
    // push an object 
    } 
    // more methods follows 
} 

Объяснение:

выше класс определяется с помощью параметр ограниченного типа. Имя параметра типа: T. За ним следует ключевое слово extends. За этим снова следует верхняя граница, которая находится здесь SteveItemType.

public class ArrayStack<T extends SteveItemType> { } 

Это гарантирует, что T по крайней мере, типа SteveItemType. T также может быть подтипом SteveItemType. Все это гарантирует, что с ArrayStack мы можем обрабатывать T, как если бы он был SteveItemType, и он может использовать все методы, относящиеся к SteveItemType. Поэтому мы можем определить следующее без какого-либо литья типов:

public String toString(){ 
     return stack[top].getName(); 
    } 
+0

Работает! Спасибо! Если у вас есть время, вы могли бы объяснить, почему ?! – Qbert

+1

Не могли бы вы взглянуть на раздел «Объяснение» моего ответа? –

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