2011-07-29 53 views
3

我有4分不同的類具有共同superlass稱爲WebService各自具有在他們聲明的以下枚舉(具有不同的值):Java枚舉繼承:是否有可能以某種方式將枚舉的toString()方法提取到一個通用的超類/枚舉?

public class GeoPlacesService extends WebService { 

public enum RequestParam { 
    LOCATION, RADIUS, SENSOR, KEY; 

    @Override 
    public String toString() { 
     return super.toString().toLowerCase(); 
    } 
} 

public enum ResponseParam { 
    STATUS, LATITUDE, LONGITUDE, NAME; 

    @Override 
    public String toString() { 
     return super.toString().toLowerCase(); 
    } 
} 
} 

是否有可能以某種方式提取枚舉toString()方法的常見的超級類/枚舉?現在,我必須爲每個枚舉重複8次toString()...

+2

如果你覺得它們應該如何顯示,你可以使你的枚舉常量小寫,那麼你的toString()就不需要了。 –

+2

@Peter Lawrey我在想這個,但是這不符合java編碼規範? (常量應該是大寫) – siamii

+0

他們應該,但應該是第一條規則;做你認爲最清楚,最簡單的事情。 –

回答

2

正如其他人所指出的,你不能枚舉從一個共同的類繼承。如果你正在做一些比你在示例代碼中顯示的更復雜的東西,那麼你可能會有某種幫助函數在靜態的某個地方接受枚舉並進行計算。枚舉可以實現一個接口,所以你可以以這種方式處理複雜的常見toString。

+0

我最終在'WebServie'中聲明瞭一個名爲'Param'的受保護接口,它有一個'toString'方法。這由所有枚舉實現。我還在WebService中編寫了一個靜態保護的'toString'輔助函數,它帶有'Param'。 – siamii

+0

然後你可能不需要接口,因爲所有的對象(甚至是枚舉)都有一個toString方法 - 所以你只是在做一個覆蓋。 – aperkins

1

枚舉是最終的,也不能從任何東西繼承,所以沒有。你可以做的最好的做法是重寫toString()並委託給一個通用的「to-stringer」實現,這樣你就不必一遍又一遍地寫實際的實現。

0

因爲enum有提供給您沒有繼承模型,你不能從你的enum類擴展任何東西,因此..