G'day,我的目標是創建一個抽象(基礎)類擴展 -ing EnumMap
。我已經有了基於EnumMap
子類的現有原型代碼,並且我想將其轉換爲可用於不同枚舉類型(即通用Enum<K>
)的通用基類。如何創建擴展EnumMap並調用super(K.class)的Generic類枚舉<K>?
的路障我打的......
- 如何分辨
EnumMap
構造方法的類通用Enum<K>
的?
爲了比較的工作(非通用)類如下所示,給出的Enum<States>
:翻譯成一個通用版本
public class MyMap extends EnumMap<States, FocusTraversalPolicy>
{
private static States DEFAULT_POLICY;
private static States currentPolicy = DEFAULT_FLOW;
public MyMap(){
this(States.DATA_INPUT);
}
public MyMap (final ProcessState defaultPolicy ){
super(States.class);
DEFAULT_POLICY = defaultPolicy;
currentPolicy = DEFAULT_FLOW;
}
}
我的能力已經達到了一組另類的問題,從而沸騰直到將Enum類型(K.class
)傳遞給EnumMap的父構造函數(即,
Cannot select from type variable
和(簡要)
No suitable constructor found ...
argument mismatch; Class<CAP#1> cannot be converted to Class<K>)
我聲明到目前爲止看起來是這樣的:
public abstract class MapBase<K> extends EnumMap<K, FocusTraversalPolicy>{
private K DEFAULT_POLICY;
private K currentPolicy;
private Enum Dummy {
NOTHING
}
private MapBase() { // disable empty constructor
this(Dummy.NOTHING); // Exclude NullPointerException-s
}
public MapBase(final K defaultPolicy) // Default compulsory
{
super(K.class); // <-- Cannot select from type variable
// OR
super(defaultPolicy.getClass()); // <-- No suitable constructor found
DEFAULT_POLICY = defaultPolicy;
currentPolicy = DEFAULT_FLOW;
}
}
這是據我得到了。我試圖用一些或多或少的不同方式來告訴我同樣的事情,例如
class MapBase<K extends Enum<K>>
extends EnumMap<K, FocusTraversalPolicy>{
:
}
雖然基類的泛型版本是最可取的,但似乎這可能是不可能的;或者我沒有按照正確的語法來使'種''我想要的基礎類。
即使知道是否「你不能這樣做」是有幫助的,我會將我的努力轉移到不同的結構。它看起來更像OO到inherit
而不是重新發明一個完美的現有原型車輪。我提前感謝。
我修正了你的格式。編輯時請注意預覽,並在保存後查看帖子。 –
這看起來嚴重錯誤:擴展EnumMap使用一個(即委託給EnumMap),在全部大寫非大寫字段,從構造函數初始化靜態字段,嘗試將Dummy實例存入K類型變量。暫時忘掉你想要的設計,並告訴我們你想要達到什麼目的,因爲這可能有更好的方法。 –
構成與繼承有什麼關係? – efekctive