Company Ghost Story 公司鬼故事 5

contents

  1. 1. Java
    1. 1.1. Duplicate Field
    2. 1.2. Strange Method Name
    3. 1.3. Strange Method Name II
    4. 1.4. Inefficient Listener
    5. 1.5. Override Method
    6. 1.6. Empty Listener
    7. 1.7. Override Empty

Java

Duplicate Field

1
2
3
4
5
6
7
8
class C {
final A a;
final A b;
C(A a) {
this.a = a;
this.b = a; // why?
}
}

為什麼要做出兩個相同意義的欄位?

Strange Method Name

1
2
3
4
5
class UIComponent {
public void setDisable(boolean d);
public boolean isDisable();
public boolean isDisabled();
}

英文不好的我,一度慘死。

Strange Method Name II

1
2
3
4
5
class UIComponent {
public void setEnabled(boolean e);
public boolean isEnabled();
public boolean getEnabled();
}

拜託決定一種風格做一件事情。

Inefficient Listener

1
2
3
4
5
6
7
void init(Component c) {
c.addFocusListener(...);
c.addChangeListener(...);
c.addSelectListener(...);
c.setSelect(...); // trigger listener ...
c.setFocus(...); // trigger listener ...
}

初始化的優先順序很重要,多次觸發有可能發生,造成重複處理。

Override Method

1
2
3
4
5
6
7
8
9
@Override
public void uninstall() {
uninstallMe();
}
private uninstallMe() { // why not write into uninstall()?
// something ...
super.uninstall();
}

函數這麼簡單,為什麼 super.method 寫在原本的函數外部。出現不同於 @Override 的函數中實在少見。

Empty Listener

1
2
3
4
5
6
c.addWindowListener(new WindowAdapter() {
@Override
public void windowClosed(WindowEvent e) {
super.windowClosed(e);
}
});

不要註冊一堆空操作。

Override Empty

1
2
3
4
@Override
public void install() {
// please add comment here if remove parent processing
}

這不知道在寫什麼,也沒叫 super.install(),該觸發事件的都沒觸發,真的沒事嗎?應該是寫錯了吧