2015-10-16 80 views
0

我想在Java枚舉中編寫一個方法:isBigger(Valoration val),如果當前評級大於作爲參數傳遞的參數拋出異常ValorationNoValued如果估值 比較(或兩者)都是NO_VALUED。方法枚舉isBigger()

public enum Valoracion { 
    NO_VALUED(0), 
    SO_BAD(0), 
    BAD(2), 
    OK(4), 
    GOOD(6), 
    EXCELENT(8), 
    WOW(10); 

    .... 

    public boolean isBigger(Valoration val) throws ValorationNoValued { 
     if (val == NO_VALUED) { 
      throw new ValorationNoValued("message"); 
     } 
     else { 
      return val.getValor() > this.valor; 
     } 
    } 
} 

我想知道當前評分是否爲NO_VALUED,但我不知道如何。

+0

'this == NO_VALUED'。 –

+2

P.S.請**總是**對'if..else'使用大括號。並格式化您的代碼。 –

回答

2

您可以隨時通過this參考的「當前對象」是它的一個enum與否。但是...

看來,你的enum有一個方法getValor()返回數值。那麼這將是更清潔的攔截異常狀態下而不是在比較方法:

public enum Valoracion { 
    NO_VALUED (0) { 
     @Override int getValor() { 
      throw new ValorationNoValued("message"); 
     } 
    }, 
    SO_BAD (0), 
    BAD(2), 
    OK (4), 
    GOOD (6), 
    EXCELENT (8), 
    WOW (10); 

.... 
int getValor() { 
    return valorValue; 
} 
public boolean isBigger(Valoration val) throws ValorationNoValued { 
    return val.getValor()>this.getValor(); 
} 

這樣,不需要任何條件語句和a.isBigger(b)b.isBigger(a)之間的對稱免費的午餐。

如果你喜歡在條件語句重寫方法,您仍然可以實現getValor()方法

int getValor() { 
    if(this==NO_VALUED) throw new ValorationNoValued("message"); 
    return valorValue; 
} 

,而不需要在isBigger方法照顧兩個方面。

0

比較this

If (this == NO_VALUED) {