Effective Java 14 In public classes, use accessor methods, not public fields
Principle
To offer the benefits of encapsulation you should always expose private field with public accessor method.
Correct Implementation
// Encapsulation of data by accessor methods and mutators
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 void setX(double x) { this.x = x; }
public void setY(double y) { this.y = y; }
}
Note
While it's never a good idea for a public class to expose fields directly, it is less harmful if the fields are immutable.
/**
* Public class with exposed immutable fields - questionable
*
* @author Kaibo
*
*/
public final 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;
}
public static void main(String[] args) {
Time t = new Time(1, 30);
t = new Time(2, 0);
System.out.println(t);
}
/*
* (non-Javadoc)
*
* @see java.lang.Object#toString()
*/
@Override
public String toString() {
return "Time [hour=" + hour + ", minute=" + minute + "]";
}
}
最新文章
- windows核心编程---第九章 同步设备IO与异步设备IO之同步IO
- C# MVC 微信支付之微信模板消息推送
- Session 类
- codeforces 446C DZY Loves Fibonacci Numbers(数学 or 数论+线段树)(两种方法)
- C# 和Jsonp的一个小demo 用jQuery与JSONP轻松解决跨域访问的问题
- MATLAB / Simulink on BeagleBone Black
- Android安全问题 静音拍照与被拍
- TOP30专访:捕鱼达人陈昊芝
- webstorm的默认project编码为系统编码GBK.
- 收藏maven错误
- exit()与_exit()的区别
- apache端口被占用
- 【我们都爱Paul Hegarty】斯坦福大学IOS8公开组个人笔记28 ScrollView 幻灯片视图
- 测序分析软件-phred的安装
- 团队作业8----第二次项目冲刺(Beta阶段) 第三天
- JS画几何图形之二【圆】
- 运维面试题之linux基础
- Navicat工具的使用 2
- IIS站点报拒绝访问Temporary ASP.NET Files的解决办法
- ADNI数据和样例