Company Ghost Story 公司鬼故事 13

contents

  1. 1. Java
    1. 1.1. Default Constructor Trap
    2. 1.2. Feature and Backward Compatibility
    3. 1.3. Fancy Check-and-Cast
    4. 1.4. Call-By-Value
    5. 1.5. Slow Feature

Java

Default Constructor Trap

1
2
3
4
5
6
class Point {
Point() {
throw new UnsupportedOperationException(); // why?
}
Point(int x, int y) {...}
}

一開始不宣告就好了,當有自定義的建構子,預設建構子自然無法被使用,沒必要設一個陷阱讓別人踩。

Feature and Backward Compatibility

1
2
3
4
5
6
class Engine {
private String mFeature = ""; // Why not null ?
}
class DbObj {
private String mFeature = ""; // Why not null ?
}

空與空字串的意義不同,預設為空字串 ("") 的狀況並不多見,為空 (null) 在序列化和反序列化時的差異就很大了。

Fancy Check-and-Cast

1
2
3
Shape shp;
if (shp.getUserName().equals("circle")) // wait, where is your `instanceof`
return ((Circle) shp).getBound();

Call-By-Value

1
2
3
4
5
void readColRow(int col, int row) {
Pair p = readPair();
col = p.first;
row = p.second;
}

Java 沒有 reference type 的這操作。

Slow Feature

1
2
3
void exec() {
for (;;) {} // where is throw new UnsupportedOperationException();
}

我可不想跟客戶說「你再等等,這功能只是比較慢」的謊言。