Код, который вы видите здесь, несколько недостроен; но я пытаюсь проверить функцию push и pop. Однако я продолжаю получать сообщение об ошибке:Почему main (String [] args) не принимает это?
Невозможно сделать статическую ссылку на стек нестатического поля.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.NoSuchElementException;
class IntegerStackGeneric extends IntegerStack {
ArrayList<Integer> stack;
IntegerStackGeneric() {
stack = new ArrayList<>();
}
public void push(int x) {
stack.add(x);
return;
}
public int pop() throws NoSuchElementException {
if(!stack.isEmpty()) {
throw new NoSuchElementException("IntegerStackGeneric: pop()");
}
return stack.remove(stack.size()-1);
}
public int size() {
return stack.size();
// return -1;
}
public boolean contains(int x) {
return false;
}
public void reverse() {
return;
}
public Iterator<Integer> iterator() {
return new ArrayList<Integer>().iterator();
}
public static void main(String[] args) {
stack.push(1);
stack.push(2);
stack.push(3);
System.out.println(stack);
System.out.println(stack.pop());
System.out.println(stack);
}
}
Кто-нибудь есть какие-нибудь идеи?
вы смотрели на другие вопросы о статических ссылок на не-го атичные поля? –
'ArrayList stack;' является нестатическим полем, но 'main()' выполняется в статической среде. Сначала вам нужно создать объект IntegerStackGeneric, чтобы получить доступ к полю экземпляра. –
GiantTree
Runnable classes вызываются без получения экземпляра непосредственно из основного метода. Таким образом, это означает, что у него есть «нулевой» экземпляр. Статические методы можно вызывать из других классов (если они являются общедоступными или вызываемыми), не получая экземпляр. Если вы определяете переменную из статического метода, как здесь, то вы должны иметь тот же модификатор, что и статический, чтобы вызвать его. Также вы должны инициализировать. –