Effective Java 3

Posted wutingjiawill

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Effective Java 3相关的知识,希望对你有一定的参考价值。

Item 15 使类和成员的可访问性最小化

1、一个设计的好的组件应该隐藏它的所有实现细节,清晰地将它的 API 以及具体实现分开。

2、尽可能的使用低级别的访问级别,降低类和成员的可访问性。

3、如果一个包私有的顶层类或接口只被一个类使用,考虑将它变为私有的静态内部类。

3、设计类的时候首先设计你所有的公有 API,然后应该反射性的将其他剩余的类设为private,只有当它真的需要提高访问级别时,才将它提升为包私有的。

4、protected的类是API的一部分,需要始终保证对它的支持,protected的级别在实际使用中是较少的。

5、如果一个方法覆盖了超类的一个方法,不能使它的访问级别比超类中的低。

6、在调试程序时,可以适当提高某些方法的访问性。

7、public类的实体域通常是非public的。

8、一个类拥有public static final array 是错误的,作为替代选择以下方法:

private static final Thing[] PRIVATE_VALUES = { ... };
public static final List<Thing> VALUES =Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
private static final Thing[] PRIVATE_VALUES = { ... };
public static final Thing[] values() {
    return PRIVATE_VALUES.clone();
}

9、在Java中,public不在是最高访问级别,如果它不在导出包中,它将是模块私有的。

10、public类不应该有public域,除非是充当常量的public static final域。

 

Item 16 在public类中 使用访问方法而不是直接使用public域

// 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; }
}    

1、如果是包私有的或是静态内部类或是不可变对象则不会有什么大问题。

2、总之、public类不要暴露可变对象,对于不可变对象是否可以暴露存疑,

 

以上是关于Effective Java 3的主要内容,如果未能解决你的问题,请参考以下文章

Effective java / SQL / C# / Debugging / python

Effective Java 3

《Effective Java》读书笔记

Effective Java 读书笔记之四 泛型

[读书笔记]Effective Java 第一章

Effective Java 3