我根据EPI的书从头开始实现一个链表。但是,在创建列表节点时这是一个错误。
我的代码是
public class Example {
class ListNode<T> {
public T data;
public ListNode<T> next;
ListNode(T data, ListNode<T> next) {
this.data = data;
this.next = next;
}
}
public static void main(String[] args) {
System.out.println("Hello world.");
ListNode<Integer> p1 = new ListNode<Integer>(123, null);
}
}
此错误是
Example.java:19: error: non-static variable this cannot be referenced from a static context
p1 = new ListNode<Integer>(123, null);
^
1 error
当我稍微修改它时它会起作用。
public static class ListNode<T> {
public T data;
public ListNode<T> next;
ListNode(T data, ListNode<T> next) {
this.data = data;
this.next = next;
}
}
但为什么我要添加静态?
答案 0 :(得分:0)
当我稍微修改它时它会起作用。
public static class ListNode<T> {
public T data;
public ListNode<T> next;
ListNode(T data, ListNode<T> next) {
this.data = data;
this.next = next;
}
}
但为什么我要添加静态?
答案 1 :(得分:0)
您无法从静态访问非静态变量,但您可以从非静态访问静态。你的主要方法是静态的,这就是你有错误的原因。阅读有关静态和非静态之间差异的更多信息。
I want to know the difference between static method and non-static method
I want to know the difference between static class and non-static class
答案 2 :(得分:0)
在您提供的示例中,您试图直接实例化内部类。
内部类与其外部类的实例绑定(请参阅:JLS 8.1.3)。简而言之,如果没有Example.ListNode
实例,则无法拥有Example
实例!
因此,您可以选择以下选项:
ListNode
移出Example
,使其成为顶级课程。然后,您将能够在主方法中实例化ListNode
。ListNode
标记为static
,这有效地使其成为顶级课程。Example
中创建main
个实例。例如Example example = new Example();
。然后,您应该可以通过调用ListNode
来创建new example.ListNode();
的实例。