2010-02-20 62 views
2

我有兩個Enum S作爲如下:Java的ENUM問題

enum Connector { 
    AND, OR, XOR; 
} 

enum Component { 
    ACTIVITY 
} 

現在,我有一類名爲Event變量follower。該變量(follower)可以具有(且應該具有)來自上述兩個Enum之一的值。

那麼,我應該給follower變量輸入什麼樣的數據?

回答

2
private Enum follower; 

而且可以使雙方枚舉實現相同的接口,例如Follower,讓現場:

private Enum<? extends Follower> follower; 

但你最好重新設計了整個事情,它不會感覺這邊請。

+0

Can Enums可以像類一樣擁有父子關係嗎?如果他們可以,那麼我凸輪使枚舉(連接器和組件)作爲父枚舉的孩子,並指定作爲「追隨者」變量的數據類型 – 2010-02-20 11:24:36

+0

枚舉是essentialyl公共YourEnum擴展枚舉',你可以不會延伸其他任何東西。但是你可以實現接口。 – Bozho 2010-02-20 11:34:08

0

我會建議創建一個名爲Follower的新類。即使可能,我也不確定單個變量應該有兩種不同的類型。

我傾向於將枚舉看作原始數據類型,您的問題就像是問我如何使變量爲int或long。

-1

爲什麼不能有java.lang.Enum類型的跟隨器。它是java中所有枚舉的父類。 所以下面的代碼工作得很好。

package com.test;

enum NewEnum { one, two; }

enum Another { three, four; }

public class TestMe {

static Enum num = NewEnum.one; 

public static void main(String[] args) { 
    System.out.println(num.toString()); 
    num = Another.three; 
    System.out.println(num.toString()); 

} 

}

2

您可以使用一個接口兩個枚舉:

interface X {} 

enum Connector implements X{ 
    AND, OR, XOR; 
} 

enum Component implements X{ 
    ACTIVITY 
} 
5

聲明一個接口,爲follower領域。

public interface Follower { 
    // any methods 
} 

並且都有枚舉實現該接口。

public enum Connector implements Follower { 
    AND, OR, XOR; 
} 


enum Component implements Follower { 
    ACTIVITY 
} 

然後你就可以宣佈你的領域:

Follower follower = Connector.OR; 

或者

Follower follower = Component.ACTIVITY; 

這個擁有宣佈領域作爲Enum<? extends Follower>(即我能想到的)幾個明顯的優勢。通過這種方式,您可以自由地將方法添加到Follower接口中,而無需在將來修改字段,但您無法控制Enum類型,因此如果您決定Follower需要一種方法,則必須更改聲明在每個地方。這可能永遠不會出現在你的場景中,但是以這種方式使用這麼少的成本,這是很好的防守練習。

第二個稍微不重要的優點,更多的是關於味道:它避免了這種類型的泛型,當你包含通配符時,泛型會變得不可讀。