解决Java变异出现错误No enclosing instance of type XXX is accessible

网友投稿 308 2022-09-24


解决Java变异出现错误No enclosing instance of type XXX is accessible

目录一、错误代码和错误现象二、如何解决这些错误1、可以不使用内部类2、可以使用静态内部类3、使用非静态内部类时,使用外部类的实例进行调用

一、错误代码和错误现象

先记录下问题现象,写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 map = new LinkedHashMap();

}

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 map = new LinkedHashMap();

}

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 map = new LinkedHashMap();

}

public static void outputThreeFormat(String[] in) {

Arrays.sort(in);

Node root = new Node("/");

}

public static void main(String[] args) {

String[] in = { "usr/local/lib6http://4", "GAMES",

"usr/DRIVERS", "home", "var/log/" };

outputThreeFormat(in);

}

}

3、使用非静态内部类时,使用外部类的实例进行调用

如下所示:

import java.util.Arrays;

import java.util.LinkedHashMap;

publhttp://ic class FileTree {

class Node {

String name;

public Node(String name) {

super();

this.name = name;

}

LinkedHashMap map = new LinkedHashMap();

}

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);

}

}


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Cisco 二层交换机基本配置(cisco anyconnect)
下一篇:HCIE培训感触经历(hcie 培训)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~