2016-05-10 10 views
1

私はC#コードに翻訳することを試みていますが、私はC#を初めて使っています(最近までジェネリックで働いたことはありません)。C#と同等のJavaクラス<E>とEはEnumを拡張します<E>

Javaのジェネリックに関しては、私はその操作方法を(多かれ少なかれ)理解しようとしています。このWhy not extending from Enum<E extends Enum<E>>とこのHow to use Class<T> in Java?を確認しましたが、このJavaコードで何が起こっているのかを実際に理解することができず、その結果、同等のC#コードについて考えることができません。

C#で
public abstract class TraciObject<E extends Enum<E>> { 
    private final String id;  
    private final EnumMap<E, ReadObjectVarQuery<?>> readQueries;  
    protected TraciObject(String id, Class<E> enumClass) { 
     this.id = id; 
     readQueries = new EnumMap<E, ReadObjectVarQuery<?>>(enumClass); 
    } 
    ... 
} 

私のアプローチは、これまでに以下の通りです:私はreadQueries = new Dictionary<E, ReadObjectVarQuery<E>>(enumClass);を持っている場合

public abstract class TraciObject<E> where E : Enum<E> { //Non-generic type Enum cannot be used with type arguments 
private readonly string id; 

private readonly Dictionary<E, ReadObjectVarQuery<E>> readQueries; 

protected TraciObject(String id, E enumClass) 
{ 
    this.id = id; 
    readQueries = new Dictionary<E, ReadObjectVarQuery<E>>(enumClass); //cannot convert from E to 'System.Collections.Generic.IEqualityComparer' 
} 

私は確認していないJavaのEnumMap(Class<K> keyType)に対応する取得しようとしますが、辞書https://msdn.microsoft.com/es-es/library/xfhwa508(v=vs.110).aspxについてのドキュメントをチェックしていましたこれはJava Docから

+1

「Enum 」と「enumClass」とは何ですか? –

+2

'TraciObject :IEnumerable 'はおそらくあなたが探しているものです –

答えて

2

可能です:EnumMap(Class<K> keyType)

指定されたキータイプで空のenumマップを作成します。

Dictionaryあなたが探しているコンストラクタがパラメータなしのものだと思われます。 MSDNから

Dictionary<TKey, TValue>()は:空であるDictionaryクラスの新しいインスタンスを初期化し、デフォルトの初期容量を持ち、キーの型の既定の等値比較子を使用しています。

+0

これはうまくいくようです。ありがとうございました! – Biurrun

関連する問題