2014-02-12 99 views
1

我怎樣才能儘量減少代碼的重複異常拋出代碼:如何組合異常以擺脫重複代碼?

public R get(int index) throws IndexException { 
    if (!((0 <= index) && (index < this.info.length))) { 
    throw new IndexException(); 
    } 
    return this.info[index]; 
} 

public void set(int index, R r) throws IndexException { 
    if (!((0 <= index) && (index < this.info.length))) { 
    throw new IndexException(); 
    } 
    this.info[index] = r; 
} 
+2

爲什麼不把檢查代碼放在它自己的函數中? – Darkhogg

+0

@ Darkhogg的建議是一個有用的建議,並遵循諸如[Object.requireNonNull](http://docs.oracle.com/javase/7/docs/api/java/util/Objects.html#requireNonNull( T,%20java.lang.String))。你也可以減少圈複雜度,因爲你的get和set方法有更少的分支。 –

+1

恕我直言,這應該是一個未經檢查的異常,你可以重用標準異常,如'IndexOutOfBoundsException ... ... – assylias

回答

5

創建將引發異常的方法:

private void checkBounds(int index) throws IndexException { 
    if (index < 0 || index >= info.length) { 
    throw new IndexException(); 
    } 
} 

然後你可以把它叫做:

public R get(int index) throws IndexException { 
    checkBounds(index); 
    return this.info[index]; 
} 

public void set(int index, R r) throws IndexException { 
    checkBounds(index); 
    this.info[index] = r; 
} 
+0

哦,謝謝!我沒有意識到你可以做到這一點與例外。 – user3299566

+1

'if(!((0 <= index)&&(index if(index <0 || index> = info.length)' - 嘗試保存幾個腦細胞... – assylias

1

這很容易做,但我建議使用現有的方法:

checkElementIndex(index, this.info.length) 

來自Guava的Preconditions