今天在编译Java程序时遇到如下问题:
No enclosing instance of type PrintListFromTailToHead is accessible. Must qualify the allocation with an enclosing instance
of type PrintListFromTailToHead (e.g. x.new A() where x is an instance of PrintListFromTailToHead).
源代码为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
public class PrintListFromTailToHead { public static void main(String[] args) { ListNode one = new ListNode( 1 ); ListNode two = new ListNode( 2 ); ListNode three = new ListNode( 3 ); one.next = two; two.next = three; ArrayList<Integer> result = printListFromTailToHead(one); System.out.println( "结果是:" + result); } class ListNode { public int val; public ListNode next; public ListNode() { } public ListNode( int val) { this .val = val; } } public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack = new Stack<Integer>(); while (listNode != null ) { stack.push(listNode.val); listNode = listNode.next; } ArrayList<Integer> arrayList = new ArrayList<Integer>(); while (!stack.isEmpty()) { arrayList.add(stack.pop()); } return arrayList; } } |
问题解释:
代码中,我的ListNode类是定义在PrintListFromTailToHead类中的内部类。ListNode内部类是动态的内部类,而我的main方法是static静态的。
就好比静态的方法不能调用动态的方法一样。
有两种解决办法:
第一种:
将内部类ListNode定义成静态static的类。
第二种:
将内部类ListNode在PrintListFromTailToHead类外边定义。
两种解决方法:
第一种:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
public class PrintListFromTailToHead { public static void main(String[] args) { ListNode one = new ListNode( 1 ); ListNode two = new ListNode( 2 ); ListNode three = new ListNode( 3 ); one.next = two; two.next = three; ArrayList<Integer> result = printListFromTailToHead(one); System.out.println( "结果是:" + result); } static class ListNode { public int val; public ListNode next; public ListNode() { } public ListNode( int val) { this .val = val; } } |
第二种:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public class PrintListFromTailToHead { public static void main(String[] args) { ListNode one = new ListNode( 1 ); ListNode two = new ListNode( 2 ); ListNode three = new ListNode( 3 ); one.next = two; two.next = three; } public static ArrayList<Integer> printListFromTailToHead(ListNode listNode) { Stack<Integer> stack = new Stack<Integer>(); while (listNode != null ) { stack.push(listNode.val); listNode = listNode.next; } ArrayList<Integer> arrayList = new ArrayList<Integer>(); while (!stack.isEmpty()) { arrayList.add(stack.pop()); } return arrayList; } } class ListNode { public int val; public ListNode next; public ListNode() { } public ListNode( int val) { this .val = val; } } |
以上所述是小编给大家介绍的Java解决No enclosing instance of type PrintListFromTailToHead is accessible问题的两种方案,希望对大家有所帮助。
原文链接:http://www.cnblogs.com/lfeng1205/archive/2016/07/24/5700735.html