解决Java错误No enclosing instance of type XXX is accessible 解决Java变异出现错误No enclosing instance of type XX
zhushy 人气:0想了解解决Java变异出现错误No enclosing instance of type XXX is accessible的相关内容吗,zhushy在本文为您仔细讲解解决Java错误No enclosing instance of type XXX is accessible的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点:解决Java变异出现错误,Java变异出现错误,下面大家一起来学习吧。
一、错误代码和错误现象
先记录下问题现象,写java代码时遇到下面的编译错误。
No enclosing instance of type FileTree is accessible. Must qualify the allocation with an enclosing instance of type FileTree (e.g. x.new A() where x is an instance of FileTree).
代码如下:
import java.util.Arrays; import java.util.LinkedHashMap; public class FileTree { class Node { String name; public Node(String name) { super(); this.name = name; } LinkedHashMap<String, Node> map = new LinkedHashMap<String, Node>(); } public static void outputThreeFormat(String[] in) { Arrays.sort(in); Node root = new Node("/"); } public static void main(String[] args) { String[] in = { "usr/local/lib64", "GAMES", "usr/DRIVERS", "home", "var/log/" }; outputThreeFormat(in); } }
错误截图如下:
二、如何解决这些错误
错误的含义是,没有可以访问的外部实例enclosing instance
。必须分配一个合适的外部类FileTree
的实例(如x.new A(),x必须是FileTree
的实例。)
结合出错的代码,很容易知道根源是什么:
class Node
是非静态内部类- 而
public static void outputThreeFormat(String[] in)
是静态方法 - 静态方法是不能直接访问非静态类的。
1、可以不使用内部类
可以把class Node
作为外部类定义,这样在FileTree类中不管是静态还是非静态方法都可以直接new Node初始化个节点。
import java.util.Arrays; import java.util.LinkedHashMap; class Node { String name; public Node(String name) { super(); this.name = name; } LinkedHashMap<String, Node> map = new LinkedHashMap<String, Node>(); } public class FileTree { public static void outputThreeFormat(String[] in) { Arrays.sort(in); Node root = new Node("/"); } public static void main(String[] args) { String[] in = { "usr/local/lib64", "GAMES", "usr/DRIVERS", "home", "var/log/" }; outputThreeFormat(in); } }
2、可以使用静态内部类
可以把class Node
作为静态内部类定义,即static class Node
。
import java.util.Arrays; import java.util.LinkedHashMap; public class FileTree { static class Node { String name; public Node(String name) { super(); this.name = name; } LinkedHashMap<String, Node> map = new LinkedHashMap<String, Node>(); } public static void outputThreeFormat(String[] in) { Arrays.sort(in); Node root = new Node("/"); } public static void main(String[] args) { String[] in = { "usr/local/lib64", "GAMES", "usr/DRIVERS", "home", "var/log/" }; outputThreeFormat(in); } }
3、使用非静态内部类时,使用外部类的实例进行调用
如下所示:
import java.util.Arrays; import java.util.LinkedHashMap; public class FileTree { class Node { String name; public Node(String name) { super(); this.name = name; } LinkedHashMap<String, Node> map = new LinkedHashMap<String, Node>(); } public static void outputThreeFormat(String[] in) { Arrays.sort(in); FileTree ft=new FileTree(); Node root = ft.new Node("/"); } public static void main(String[] args) { String[] in = { "usr/local/lib64", "GAMES", "usr/DRIVERS", "home", "var/log/" }; outputThreeFormat(in); } }
加载全部内容