当前位置: 首页 > news >正文

OuterClass.this cannot be referenced from a static context

目标,定义了一个内部类,然后把这个内部类设置为单例

一 使用非静态内部类 

public class OuterClass {public  class InnerClass {}
}

直接定义单例:

.OuterClass.this' cannot be referenced from a static context

public class OuterClass {public  class InnerClass {private static InnerClass staticField= new InnerClass();}
}

 这种是直接 new 了内部类。结果报错了。

首先这里定义的是 非静态内部类。非静态内部类,可以看作是 外部类的一个 成员。这里 直接new 非静态内部类,而 并没有new 外部类,就相当于 外部类实例不存在,外部类实例不存在的情况下,他的成员怎么能存在呢? 所以 这里 不能直接 new 非静态内部类,改成如下:

public class OuterClass {public  class InnerClass {private static InnerClass staticField= new OuterClass().new InnerClass();}
}

Static declarations in inner classes are not supported at language level '8'

这种写法又报了这种错误。一般来说,这种写法应该没什么问题,只是 目前 java8还不支持,需要升级JDK版本才行。

再换一种写法

public class OuterClass {private static InnerClass staticField= new OuterClass().new InnerClass();public  class InnerClass {}
}

将静态变量声明为外部类的变量。

二 使用静态内部类

public class OuterClass {public static  class InnerClass {private static InnerClass staticField= new InnerClass();}
}

如果是静态内部类,可以 直接独立的进行 new静态内部类。 静态内部类 可以独立存在,而不依赖外部类的实例。

非静态内部类和静态内部类有什么区别

 对于访问权限来说,非静态内部类的权限 大于 静态内部类。

非静态内部类可以 访问 外部类的 所有 成员和方法,包括私有的。可以理解为,非静态内部类的实例中,存在一个 外部类的 this的引用

静态内部类,因为可以独立实例化,在静态内部类中 不存在 外部类的 this引用,所以 静态内部类只能访问外部类的 静态成员。

另外,非静态内部类种,不定义静态成员。不然会报错误,可以定义成外部类的静态成员。如果需要在内部类中定义静态成员,可以考虑将类定义为静态内部类。

 

http://www.lryc.cn/news/345807.html

相关文章:

  • CAP与BASE分布式理论
  • JavaScript性能优化策略
  • curl访问流式非流式大模型openai api接口
  • Go 使用 MongoDB
  • 什么是g++-arm-linux-gnueabihf
  • Unity延时触发的几种常规方法
  • CSS文字描边,文字间隔,div自定义形状切割
  • XWiki 服务没有正确部署在tomcat中,如何尝试手动重新部署?
  • 【退役之重学Java】关于 Redis
  • DateKit
  • 百度智能云数据仓库 Palo 实战课程
  • 服务端JavaScript(Node.js)与去IO编程:Node.js的事件驱动和非阻塞IO模型,它是如何使JavaScript走向后端的
  • 一键局域网共享工具
  • python实现把doc文件批量转化为docx
  • WEB基础---反射
  • impdp恢复表后发现比原表多了100多行
  • Jupyter配置远程访问的密码
  • Windows下通过MySQL Installer安装MySQL服务
  • C语言 [力扣]详解环形链表和环形链表II
  • Threejs 学习笔记 | 灯光与阴影
  • SSH:安全远程访问的基石
  • 杰发科技AC7801——ADC之Bandgap和内部温度计算
  • 了解 macOS 中的系统完整性保护 (SIP):开启与关闭
  • 【Linux】简易进度条的实现
  • Docker + Django跨域解决方案
  • Maven 插件使用
  • 【HMGD】GD32/STM32 DMA接收不定长串口数据
  • 局域网手机端远程控制手机
  • 如何在OpenWrt软路由中增加一个新功能
  • 【linux】vmtouch文件缓存管理工具