解决Java变异出现错误No enclosing instance of type XXX is accessible
一、错误代码和错误现象
先记录下问题现象,写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);
}
}
到此这篇关于解决Java变异出现错误No enclosing instance of type XXX is accessible的文章就介绍到这了,更多相关解决Java错误No enclosing instance of type XXX is accessible内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
Netty分布式pipeline管道Handler的添加代码跟踪解析
这篇文章主要介绍了Netty分布式pipeline管道Handler的添加代码跟踪解析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2022-03-03
SpringBoot通过@MatrixVariable进行传参详解
这篇文章主要介绍了SpringBoot使用@MatrixVariable传参,文章围绕@MatrixVariable展开详细的内容介绍,具有一定的参考价值,需要的小伙伴可以参考一下2022-06-06


最新评论