我有兩個Enum
S作爲如下:Java的ENUM問題
enum Connector {
AND, OR, XOR;
}
enum Component {
ACTIVITY
}
現在,我有一類名爲Event
變量follower
。該變量(follower
)可以具有(且應該具有)來自上述兩個Enum
之一的值。
那麼,我應該給follower
變量輸入什麼樣的數據?
我有兩個Enum
S作爲如下:Java的ENUM問題
enum Connector {
AND, OR, XOR;
}
enum Component {
ACTIVITY
}
現在,我有一類名爲Event
變量follower
。該變量(follower
)可以具有(且應該具有)來自上述兩個Enum
之一的值。
那麼,我應該給follower
變量輸入什麼樣的數據?
private Enum follower;
而且可以使雙方枚舉實現相同的接口,例如Follower
,讓現場:
private Enum<? extends Follower> follower;
但你最好重新設計了整個事情,它不會感覺這邊請。
我會建議創建一個名爲Follower的新類。即使可能,我也不確定單個變量應該有兩種不同的類型。
我傾向於將枚舉看作原始數據類型,您的問題就像是問我如何使變量爲int或long。
爲什麼不能有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());
}
}
您可以使用一個接口兩個枚舉:
interface X {}
enum Connector implements X{
AND, OR, XOR;
}
enum Component implements X{
ACTIVITY
}
聲明一個接口,爲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
需要一種方法,則必須更改聲明在每個地方。這可能永遠不會出現在你的場景中,但是以這種方式使用這麼少的成本,這是很好的防守練習。
第二個稍微不重要的優點,更多的是關於味道:它避免了這種類型的泛型,當你包含通配符時,泛型會變得不可讀。
Can Enums可以像類一樣擁有父子關係嗎?如果他們可以,那麼我凸輪使枚舉(連接器和組件)作爲父枚舉的孩子,並指定作爲「追隨者」變量的數據類型 – 2010-02-20 11:24:36
枚舉是essentialyl公共YourEnum擴展枚舉',你可以不會延伸其他任何東西。但是你可以實現接口。 –
Bozho
2010-02-20 11:34:08