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

 更新时间:2021年09月29日 15:20:11   作者:zhushy  
这牌你文章主要给大家分享解决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);

 }

}

到此这篇关于解决Java变异出现错误No enclosing instance of type XXX is accessible的文章就介绍到这了,更多相关解决Java错误No enclosing instance of type XXX is accessible内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java线程之线程的生命周期的使用

    java线程之线程的生命周期的使用

    本篇文章介绍了,java线程之线程的生命周期的使用。需要的朋友参考下
    2013-05-05
  • SpringCloud配置服务端的ConfigServer设置安全认证

    SpringCloud配置服务端的ConfigServer设置安全认证

    这篇文章主要为大家介绍了SpringCloud配置服务端的ConfigServer设置安全认证,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-08-08
  • Java实现企业员工管理系统

    Java实现企业员工管理系统

    这篇文章主要为大家详细介绍了Java实现企业员工管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • springboot项目引入外部jar包的详细图文教程

    springboot项目引入外部jar包的详细图文教程

    在项目中有时候需要引入外部jar包,启动运行,下面这篇文章主要给大家介绍了关于springboot项目引入外部jar包的详细图文教程,需要的朋友可以参考下
    2023-09-09
  • 教你使用eclipse 搭建Swt 环境的全过程

    教你使用eclipse 搭建Swt 环境的全过程

    本文给大家分享使用eclipse 搭建Swt 环境的全过程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-12-12
  • Java中synchronized实现原理详解

    Java中synchronized实现原理详解

    这篇文章主要介绍了Java中synchronized实现原理详解,涉及synchronized实现同步的基础,Java对象头,Monitor,Mark Word,锁优化,自旋锁等相关内容,具有一定借鉴价值,需要的朋友可以参考下。
    2017-11-11
  • SpringBoot登录拦截配置详解(实测可用)

    SpringBoot登录拦截配置详解(实测可用)

    这篇文章主要介绍了SpringBoot登录拦截配置详解(实测可用),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07
  • SpringCloud Feign高级配置详解

    SpringCloud Feign高级配置详解

    这篇文章主要介绍了SpringCloud Feign高级配置,feign是netflix提供的服务间基于http的rpc调用框架,在spring cloud得到广泛应用
    2022-09-09
  • Java实现redis分布式锁的三种方式

    Java实现redis分布式锁的三种方式

    本文主要介绍了Java实现redis分布式锁的三种方式,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • 详解J2EE开发的网站部署到阿里云服务器的方法

    详解J2EE开发的网站部署到阿里云服务器的方法

    这篇文章主要介绍了详解J2EE开发的网站部署到阿里云服务器的方法,需要的朋友可以参考下
    2018-01-01

最新评论