javac 对于私有内部类的奇怪处理

解决Lombok编译器不兼容:从javac到ECJ的完整排查与配置指南 Java编译时注解处理器是现代开发中提升效率的重要工具,它能在编译阶段自动生成代码,减少样板代码编写。其工作原理是通过编译器API在抽象语法树层面修改代码,最终生成字节码。这项技术的核心价值在于提升开发效率、保持代码简洁性,广泛应用于企业级后端开发、微服务架构和快速原型构建。在实际工程实践中,当项目使用不同编译器如标准javac或Eclipse ECJ时,注解处理器可能因编译器API差异而失效。本文聚焦于Lombok这一流行注解处理器在ECJ编译器环境下的兼容性问题,通过分析Maven构建配置和IDE设置, 阅读详情

今天同学遇到一个奇怪的问题,让我帮他看,结果发现了一个 javac 的处理小 bug 。

 

看这段代码:

 

 

你可能认为,这段代码编译之后,会生成两个 class 文件:OuterClass.class 和 OuterClass$InnerClass.class 。但事实是,还会多生成一个 OuterClass$1.class ,即使去掉 static 修饰符也是这样的。为什么会这样呢?

 

我经过上网查找,找到的讨论:
http://hi.baidu.com/digno/blog/item/cd894a630511a16a0c33faa5.html
http://72.5.124.102/thread.jspa?threadID=277695&tstart=9117
http://forums.sun.com/thread.jspa?threadID=594503

 

解决的办法是:给 InnerClass 加上一个 public 的构造函数,或者去掉 InnerClass 的 private 修饰符。

 

 

用 Eclipse 编译就没有这个问题。这个问题的麻烦之处就在于:如果用 emma 测覆盖率,那么那个 OuterClass$1 就没办法覆盖到。

第九届蓝桥杯JavaC组决(国)赛真题 1:年龄问题 s夫人一向很神秘。这会儿有人问起她的年龄,她想了想说: “20年前,我丈夫的年龄刚好是我的2倍,而现在他的年龄刚好是我的1.5倍”。 你能算出s夫人现在的年龄吗? 这道题就是暴力就可以了 40 2 : 海盗与金币 12名海盗在一个小岛上发现了大量的金币,后统计一共有将近5万枚。 登上小岛是在夜里,天气又不好。由于各种原因,有的海盗偷拿了很多,有的拿了很少。 后来为了“均贫富”,头... 阅读详情

相关推荐

从零构建工业级SPI-CAN网关:CH347与CH9431的软硬件协同设计实战

本文详细介绍了基于CH347和CH9431芯片构建工业级SPI-CAN网关的完整方案。通过硬件架构设计、Linux驱动定制、并发处理优化和EMC抗干扰测试,实现高可靠性通信网关,适用于工业自动化和汽车电子等严苛环境。

spark7igniter的博客 632

javac与java命令剖析:Java中带包的类的编译与执行

  以HelloWorld.java为例,详细讲解一下Java中带包的类的编译与执行。 一、实例环境描述   项目文件夹为【e:/xxx/java_teach/week05】,HelloWorld.java源文件存放在week05/src/com/xyfd/目录下:   HelloWorld.java文件的内容如下: /** * 文件名:HelloWorld.java * */...

小宇飞刀的BLOG 853

手把手教你用gmid方法设计二级运放:从理论到仿真全流程(附避坑指南)

本文详细介绍了使用gmid方法设计二级运放的全流程,从理论到仿真实践,特别针对初学者常见问题提供避坑指南。通过系统化的晶体管尺寸确定技术,帮助工程师在性能、功耗和面积之间找到最佳平衡点,适用于模拟集成电路设计中的关键模块开发。

weixin_29213525的博客 271

奇怪的数列 | 第六届蓝桥杯国赛JavaC组

Y 博士经彻夜研究,发现了规律:第一行的数字随便是什么,以后每一行都是对上一行“读出来”。比如第 2 行,是对第 1 行的描述,意思是:1 个 1,1 个 3,所以是:1113。第 3行,意思是:3 个 1,1 个 3,所以是:3113。请你编写一个程序,可以从初始数字开始,连续进行这样的变换。

2301_78848414的博客 281

Ubuntu18.04黑屏救急指南:从tty到图形界面的5种恢复方法(附网络配置技巧)

本文针对Ubuntu 18.04系统启动后出现黑屏并进入tty命令行的问题,提供了一套从紧急诊断到完全恢复图形化界面的系统性实战指南。文章详细讲解了五种核心恢复方法,包括重启显示管理器、重装ubuntu-desktop桌面环境、手动安装Xorg与LightDM等,并重点解决了纯命令行环境下的网络配置难题,帮助用户快速修复系统,恢复工作环境。

weixin_29243279的博客 359

Java本地AI推理初体验:Jlama+LangChain4j构建离线问答系统

Jlama 是专为 Java 生态设计的现代化大型语言模型(LLM)推理引擎,旨在让开发者无需依赖外部服务即可直接在 Java 应用中运行本地化模型推理。本文将结合Jlama + langchain4j 实现一个本地可运行的简单问答Demo。

2501_92589102的博客 407

java -version和javac -version版本不同

最近研究了悟空crm java版本,运行时要求JDK1.8。 本地编译和打包,用的JDK1.8。 Java 环境变量,配得也是1.8. 但是执行 start.sh72crm.sh 时,提示 D:\GitRepos\gitee\72crm-java\target\crm9-release\crm9>72crm.bat Exception in thread"m...

AI一人公司实践中,AI全栈程序员,编程-产品-营销 994

【蓝牙协议栈】【BLE】详解蓝牙BLE连接建立过程

advertiser。发出广播的设备observer或者scanner。可以扫描广播的设备initiator。能发起连接的设备master或者central。连接成功后的主设备,即主动发起packet的设备slave或者peripheral。连接成功后的从设备,即被动回传packet的设备图11通过时间把observer,initiator和central串起来了,其实这三个角色是相互独立的,也就是说一个设备可以只支持observer角色,而不支持initiator和central角色。

风云说通信 2521

多出的类是怎么回事(来源于项目)

多出的类是怎么回事最近我们做了一个项目,我们的任务是帮助分析几个奇怪Bug的产生原因,并修正。开发工具使用的是Eclipse3.0,需要提交给客户的成果物有源代码以及编译后打包的jar文件。   整个开发工作还算比较顺利,按期提交了成果物。但几天后,客户向我们提出了一个质疑,要求我们解释,我们提交的jar中包含有269个Class,而客户编译源代码的结果有271个Class,这相差的两个C

somat的专栏 1433

C# 与蓝牙 BLE 设备通信:基于 Windows.Devices.Bluetooth 实现手环/传感器数据读取

本文介绍了如何利用C#的Windows.Devices.Bluetooth命名空间实现与蓝牙BLE设备的通信。首先概述了BLE技术特性及其在物联网中的应用场景,包括智能穿戴设备和传感器。随后讲解了BLE的GATT协议架构,解析了服务(Service)和特性(Characteristic)的概念。文章重点展示了通过C#实现设备扫描、连接、数据读取的完整代码示例,并详细说明了如何使用通知(Notifications)功能实现实时数据更新。最后提供了订阅心率测量特性变化的实现代码,为开发者提供了完整的BLE设备通

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1322

YOLO项目从零开始:超详细运行教程(图文保姆级教学)

至此,我们已经完整跑通了YOLO项目的安装与启动流程,无论你是零基础小白还是刚入门的AI新兵,只要按部就班操作,也能轻松实现目标检测项目的落地。

一键难忘的博客 4798

找不到javac

在我安装jdk的时候很奇怪为什么我的bin目录下不是跟人家说的一样都是exe文件呢?而且当我在cmd中运行javac的时候,给我的显示是‘javac’不是内部或外部命令,也不是可运行程序或批处理文件。我个纳闷呢! 记得上次上java课的时候就用javac和java这两条命令最有点程序员的样子,可是现在。。。连这个都出错了。郁闷!     开始查资料,上网搜。起先以为是我的环境变量没有设置才引

daiyan_csdn的博客 1062

〖Python接口自动化测试实战篇④〗- 接口自动化测试详解

[接口测试] 是相对来说和我们的功能测试 [最为接近的一种自动化测试手段] ,所以我们首先来学习接口测试的内容。 实现接口的开发与接口的测试,在我们的思维上、想法上、面向的态度上都是不一样的。所以大家要有一个思维上的转换,要认识了解一下 接口测试到底是做什么的、它的功能、意义在哪里。...

易编橙 · 终身成长社群,相遇已是上上签! 5万+

第九届蓝桥杯决赛JavaC组真题——详细答案对照(完整版)

第九届蓝桥杯决赛JavaC组真题——详细答案对照(完整版) 测试数据下载地址: 标题:年龄问题 标题:海盗与金币 标题:全排列 标题:约瑟夫环 标题:交换次数 标题:自描述序列

红目香薰 2251

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

处理java错误:javac不是内部或外部命令

一、jdk安装 jdk的安装直接按照提示一步步进行,需要注意的是记住安装路径。 二、环境变量的配置 需要配置的环境变量有三个:java_home , path 和classpath;步骤如下: 1、右击计算机,点击属性,在弹出面板里点击 高级系统设置,弹出如图所示面板: 点击 环境变量 : 2、添加上述上个环境变量(以安装目录D:\Program Files\Java\jdk1...

hello 9596

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

javac编译乱码

PersonTest.java:1: 错误: 非法字符: \65279 解决途径如下 用记事本打开java源文件,另存为ANSI格式 如果java文件包含中文字符,使用-encoding gbk格式进行编译,如javac -d . PersonTest.java -encoding gbk (注意,这里如果使用-encoding utf8仍然会报错) 分析:这里之所以提示...

aihuo4431的博客 661

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

第六届蓝桥杯JavaC组国(决)赛真题

解题代码部分来自网友,如果有不对的地方,欢迎各位大佬评论 题目1、机器人数目 少年宫新近邮购了小机器人配件,共有3类,其中, A类含有:8个轮子,1个传感器 B类含有: 6个轮子,3个传感器 C类含有:4个轮子,4个传感器 他们一共订购了100套机器人,收到了轮子600个,传感器280个。 根据这些信息请你计算:B类型机器人订购了多少个? 请直接提交该整数,不要填写任何多余内容。 答案:60 ...

南 墙 1万+

为什么局部内部类访问局部变量,局部变量必须声明为final?

今天在看AWT的事件处理机制的时候,突然对局部内部类中访问局部变量的情况有了一点小好奇,因为在java中规定,局部内部类访问外部类中方法的局部变量时,该局部变量必须定义为final。百度了老半天,发现说的都挺模糊的,结合查到 的结果再想了老半天,突然有所体会,现在将我认为合理的理由阐明如下,如有错误,还望各位大虾们给以纠正啊,呵呵。。。。。 首先来看一段代码: public class M

KeepThinking_的专栏 1482

javah javac 不是内部或外部命令 解决方法

配置JNI环境时,遇到一个非常奇怪的问题,java环境变量配置好了后,cmd下执行java -version 正确,但是javah 或者javac 则提示不是内部或外部命令。 将系统环境变量Path中有关java环境变量的配置拷贝一份到用户变量,重开cmd窗口即可。 --------------------- 作者:wangpp2009 来源:优快云 原文:https://blo...

Lin_XiJun的博客 783

dos不是内部java,JAVAC不是内部命令或外部命令怎么解决(DOS命令中出现“javac不是内部或外部命令)...

上午,一个朋友在我的御弓博客(中留言,说是他按照我的教程安装了jdk,但是在DOS工作台中运行javac的时候出现了“javac不是内部或外部命令,也不是可运行的程序或批处理文件”,他在网上找了一大堆的原因和解决方法,都是让他新建的JAVA_HOME、CLASSPATH这两个变量,然后进行相应配置,结果根本就没有用处。说实话,当时我也感觉特别奇怪啊,按理说不应该有什么错误啊?其实对于Java的初学...

weixin_35235724的博客 134

java -version可以了,但是javac不是内部或外部命令,也不是可运行的程序或批处理文件(解决方案)

平时开发用工具的原因,配置JDK环境后,在CMD窗口输入 java -verion 命令,有显示JDK版本,就认为环境已经配置好。 比如这样: 但是这几天想看看java文件编译后的字节码是啥样的,于是CMD窗口,输入 javac , 发现提示报错: 这就很奇怪,于是去找环境变量的配置,经过自己测试,终于解决问题。 首先回顾一下我自己的 JDK 的环境变量配置的 三个变量: J...

EDG_win的博客 8068

解决Lombok编译器不兼容问题:从注解处理器原理到多环境配置实战

注解处理器是Java编译时的重要扩展机制,通过在编译阶段处理源代码中的注解,能够自动生成代码、执行验证或进行其他编译时操作。其工作原理是编译器在解析Java源文件后,将注解信息传递给注册的处理器,由处理器生成新的源文件或修改现有代码。这一机制为Java开发带来了显著的技术价值,能够大幅减少样板代码、增强代码一致性并提升开发效率。在实际工程实践中,注解处理器广泛应用于数据模型生成、依赖注入配置、API文档生成等场景。本文聚焦于Lombok这一流行的代码生成工具,它正是基于注解处理器实现getter、sette

hqmln的博客 396
上一篇: 如何正确的使用java.util.ConcurrentLinkedQueue
下一篇: Apache Commons 库:用了都说好!
shell_picker
博客等级 码龄17年 18粉丝 48原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值