Eckel 's Thinking in Java 4 판 (625 페이지)에서 수정 된 다음 코드에서 정적 내부 클래스 사용에 대한 질문이 있습니다.정적 내부 클래스 사용
이 코드는 Node라는 정적 내부 클래스를 사용합니다. 스택 구조를 만들면 스택에 노드를 밀어 넣을 수 있습니다. 하지만 노드 클래스가 정적 인 이유에 대해 혼란 스럽습니다. LinkedStack 클래스에서 노드가 하나만 생성된다는 것을 의미하지 않습니까? 왜/왜 실제로 많은 다른 노드를 스택에 넣을 수 있고, 그런 다음 스택을 띄울 수 있습니까? (물론 스택이해야 할 일입니다.) 사실 private static class Node
을 'private class Node`로 변경할 수 있으며 작동합니다 ... 왜 Eckels가 정적 클래스 Node를 선택 했습니까?
이 예제에서 입력은 "Phasers", "on", "stun!"의 세 단어입니다. 출력은 "stun!", "on", "Phasers"입니다. 방법 또는 필드의 문맥에서 사용될 때
public class LinkedStack<T> {
//generic inner class node
private static class Node<U> {
U item;
Node<U> next;
Node() {
item = null;
next = null;
}
Node(U item, Node<U> next) {
this.item = item;
this.next = next;
}
boolean isDummyNode() {
return item == null && next == null;
}
}
//initialize top of stack as a dummy first node
private Node<T> top = new Node<T>();
public void push(T item) {
top = new Node<T>(item, top);
}
public T pop() {
T result = top.item;
if(!top.isDummyNode())
top = top.next;
return result;
}
public static void main(String[] args) {
LinkedStack<String> stack = new LinkedStack<String>();
for(String s : "Phasers on stun!".split(" "))
stack.push(s);
String s;
while((s = stack.pop()) != null)
System.out.println(s);
}
}
기타 질문에 대한 답변이 없습니다. 게다가 Eckel의 Java에 관한 책에서 질문이 나온 것이므로 분명히 읽고 연구하고 있습니다. 당신의 결정에 항소 할 수 있습니까? – topsail
* 노드 클래스가 정적 인 이유에 대해 혼란 스럽습니까? * 중복 Q/A에서 설명합니다. * LinkedStack 클래스에서 단 하나의 Node가 생성된다는 것을 의미하지 않습니까? * 클래스이고 최상위 클래스 또는 내부 클래스 (로켓 과학이 아닙니다)에도 불구하고 클래스의 인스턴스를 여러 개 만들 수 있습니다. * 어떻게/왜 실제로 많은 다른 노드를 스택에 푸시 할 수 있습니까? * 인스턴스이며 원하는대로 동작하게 할 수 있습니다. 이 모든 것을 가지고, 당신의 질문은 왜 * 노드 클래스가 정적 인 지에 대한 것입니다. * 이것은 dup을 읽음으로써 대답 될 수 있습니다. –
@topsail : 매력적이라면 자바에 골드 배지가있는 모든 사용자가 이것을 다시 열 수 있습니다. 또는 질문을 편집하면 다시 검토 대기열로 보내집니다. 하지만 당신이 키워드'정적'의 잘못된 이해를 놓아 줄 수 있다면 Luiggi의 링크 된 대답은 당신의 질문을 다루어야한다고 생각합니다. –