×

消息

EU e-Privacy Directive

This website uses cookies to manage authentication, navigation, and other functions. By using our website, you agree that we can place these types of cookies on your device.

View e-Privacy Directive Documents

You have declined cookies. This decision can be reversed.

保持最小的可变性
说一个类"不变",就是说它的所有对象在运行时不可以被更改。Java系统库中有很多这样的例子,比如String、类封装的基本数据类型、BigInteger和BigDecimal等等。想创建一个不变类,需要遵循下面5条原则:
1. 不能提供任何改变对象状态的方法(比如setter)。
2. 保证类不能被继承,否则子类将可以通过覆盖父类方法来改变对象状态。常用的做法是把类声明为final,还有另一种方法是隐藏或保护所有的构造函数,只提供一个静态factory方法来创建对象(参见item 1)。
3. 所有属性都声明为final。
4. 所有属性都声明为私有。

今天给领导博客的广告做了些调整。原本首页横幅广告的位置是固定的,即便进入单篇文章它也还在原地:

又是很简单的一节

public类不应该有public属性,必须使用访问方法(accessor methods)

有些情况下,会需要写一些纯粹用作数据存储,而没有任何行为的类,比如:

// Degenerate classes like this should not be public!
class Point {
	public double x;
	public double y;
}

上一节所说,这样做会破坏数据封装,所以Object-Oriented语言的死忠分子们会拒绝接受这样的写法,并要求全面使用访问方法改写它:

这节比较简单,都是各种面试考烂了的东西。

类和属性的访问控制应尽可能严格

访问控制是Java语言中最重要的概念之一,它使得对数据的封装成为可能。好的数据封装可以有效分隔一个系统中的不同模块,增加系统可靠性,便于维护,而且使各模块的开发和重构完全独立,实现细节上的改动不会影响对外开放的API。

对于类,有两个访问级别:package-private和public。其中前者是默认的,如果一个类没有被声明为public,那么它就是package-private,也就是说,它只在其自己所在的软件包内可见。这两个级别的选择没什么复杂的:只有要作为API开放的类,才声明为public,其余实现的细节,则尽可能都声明为package-private。如果一个非public类只被另外一个类使用,那么它应该被定义成使用者的私有内嵌类(private nested class),这样可以进一步减小它的可见范围,使其更好地被保护。

前一阵子准备雅思考试,没时间继续Effective Java,现在考完了,要捡起来。

实现Comparable接口

Comparable接口只有唯一一个方法:

public interface Comparable<T> {
	int compareTo(T t);
}

compareTo方法的返回值是一个整数。对于a.compareTo(b),如果返回负值,则表明a < b;正值表明a > b;如果返回0,则说明a与b相等。如果a与b类型不同,应该弹出ClassCastException。

今天为一个网站改数据,遇到个小问题。

从数据库中提取一系列记录,其中一列是一个业务编号,为通用性考虑,这一列采用了字符串类型,而其内容却是数字,比如"1","2","12"等等。今天删除了某些记录,又新加入了一些,所以这一列的顺序相对于主关键字来说就混乱了。提取的数据需要按这一列排序,于是就简单写了个查询:

SELECT product_type_label, product_name FROM product 
    WHERE product_type = 'ENTREES' 
    ORDER BY product_type_label;

结果自然是错的:

1 만두 Raviolis 餃子
10 떡볶이 Toppokki トッポッキ
11 Boulots assaisonn&eacute;s
12 육회 Steak tartare cor&eacute;en ユッケ
13 닭볶음면 Nouilles saut&eacute;es avec poulet チキン焼きそば
14 Assortiment de beignets
2 김밥 Maki cor&eacute;en のり巻き
3 김치전 Kimchijeon キムチジョン
4 해물 파전 Crêpe cor&eacute;enne de fruits de mer 海鮮チヂミ
5 잡채 Jabchai チャプチェ
6 깐풍기 Saut&eacute; de poulet カンプンギ
7 오징어 볶음 Saut&eacute; de calamar piquant
8 새우튀김 Beignets de crevettes 天ぷら
9 김치돼지볶음 Saut&eacute; de Kimchi avec porc キムチ豚炒め

第4页 共10页