《Effective Java》第25条:限制源文件为单个顶级类

说明:

关于本博客使用的书籍,源代码Gitee仓库 和 其他的相关问题,请查看本专栏置顶文章:《Effective Java》第0条:写在前面,用一年时间来深度解读《Effective Java》这本书

正文:

Java允许我们在一个Java文件中,定义多个顶级类,并且可以正常编译和使用,但是这种方式是没有任何好处的,只会带来巨大的风险。

如书上举的例子:

正常情况下,在Utensil.java 源文件中定义 Utensil类 、在 Dessert.java 源文件中定义 Dessert类。是完全没有问题的。这也是我们经常做的。

当在 Utensil.java 源文件中定义 Utensil类 和 Dessert类,程序不会报错,执行也没问题

但是当再从 Dessert.java 源文件中定义 Utensil类 和 Dessert类,在idea中,程序就会编译出错,编译器会提醒你定义了多个Utensil 和Dessert类。

书中提到的使用命令符的 javac 命令,这里不再演示,也没有必要。

如果我们有在一个源文件中定义多个类的需求,那么最好的方式就是考虑使用静态成员类(详见第24条)。

总结:

原文P92:永远不要把多个顶级类或者接口放在一个源文件中。遵循这个规则可以确保编译时一个类不会有多个定义。这么做反过来也能确保编译产生的类文件,以及程序结果的行为,但会受到源文件被传给编译器时的顺序的影响。

相关推荐
28岁青春痘老男孩3 小时前
JDK8+SpringBoot2.x 升级 JDK 17 + Spring Boot 3.x
java·spring boot
方璧3 小时前
限流的算法
java·开发语言
元Y亨H4 小时前
Nacos - 服务注册
java·微服务
Hi_kenyon4 小时前
VUE3套用组件库快速开发(以Element Plus为例)二
开发语言·前端·javascript·vue.js
曲莫终4 小时前
Java VarHandle全面详解:从入门到精通
java·开发语言
一心赚狗粮的宇叔4 小时前
中级软件开发工程师2025年度总结
java·大数据·oracle·c#
奋进的芋圆4 小时前
DataSyncManager 详解与 Spring Boot 迁移指南
java·spring boot·后端
ghie90904 小时前
基于MATLAB GUI的伏安法测电阻实现方案
开发语言·matlab·电阻
Gao_xu_sheng4 小时前
Inno Setup(专业安装/更新 EXE)
开发语言