《Effective Java》第16条:要在仅有类中使用访问方法而非公有域
2022/8/14 1:26:42
本文主要是介绍《Effective Java》第16条:要在仅有类中使用访问方法而非公有域,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
《Effective Java》第16条:要在仅有类中使用访问方法而非公有域
一、 问题
有时候我们需要定义一些类用来集中实例域(Java对象中的数据)。经常我们会把这些数据域声明为public,可以被直接访问。这样公有类暴露了它的数据域,有以下两个缺点:
1、要想在将来改变其内部表示法是不可能的,因为公有类的客户端代码已经遍布各处了
二、分析
class Point { public double x; public double y; }
上面数据域是可以被直接访问,没有提供封装功能,我们应该用包含私有域和公有方法的类代替
class Point { private double x; private double y; public Point(double x, double y) { this.x = x; this.y = y; } public double getX() { return x; } public double getY() { return y; } }
公有类不应该直接暴露数据域,如果类是包级私有的,或是私有的嵌套类,可以直接暴露它的数据域。如果公有类想暴露它的数据域怎么办?可以将数据域设置为不可变的,如下例:
public class Time { private static final int HOURS_PER_DAY = 24; private static final int MINUTES_PER_HOUR = 60; public final int hour; public final int minute; public Time(int hour, int minute) { if (hour < 0 || hour >= HOURS_PER_DAY) { throw new IllegalArgumentException("Hour: " + hour); } if (minute < 0 || minute >= MINUTES_PER_HOUR) { throw new IllegalArgumentException("Min: " + minute); } this.hour = hour; this.minute = minute; } }
这个类确保了每个实例都表示一个有效时间。
三、总结
简而言之,公有类永远都不应该暴露可变的域。
这篇关于《Effective Java》第16条:要在仅有类中使用访问方法而非公有域的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-27消息中间件底层原理资料详解
- 2024-11-27RocketMQ底层原理资料详解:新手入门教程
- 2024-11-27MQ底层原理资料详解:新手入门教程
- 2024-11-27MQ项目开发资料入门教程
- 2024-11-27RocketMQ源码资料详解:新手入门教程
- 2024-11-27本地多文件上传简易教程
- 2024-11-26消息中间件源码剖析教程
- 2024-11-26JAVA语音识别项目资料的收集与应用
- 2024-11-26Java语音识别项目资料:入门级教程与实战指南
- 2024-11-26SpringAI:Java 开发的智能新利器