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 + "]";

}

}

Effective Java 14 In public classes, use accessor methods, not public fields,布布扣,bubuko.com

Effective Java 14 In public classes, use accessor methods, not public fields

上一篇:虚拟机中的SQL server使用NetDrive附加位于网络驱动器或远程地址的MDF数据库文件


下一篇:MySQL事务隔离级别详解(转)