C#ジェネリックにはタイプのワイルドカードがありません。NetGenericsはCLRでサポートされているジェネリックですが、Java JVMはジェネリックをサポートせず、Syntax Sugarのみをサポートし、コンパイラによってコンパイルされたときにオブジェクトタイプに変換されます
タイプワイルドカードは、javaの一般的なタイプの親クラスを表します
public void test(list <object> c){for(int i = 0; i <c.size(); i ++){system.out.println(c.get(i)); }}//リストを作成<String>オブジェクトリスト<String> strlist = new ArrayList <String>(); //前のテスト方法テスト(STRLIST)をカレンダー;
上記のプログラムをコンパイルすると、コンパイルエラーがテスト(STRLIST)で発生します。つまり、<String>はlist <Object>のサブクラスと見なすことはできません。現時点では、タイプのワイルドカードを使用する必要があります。
上記のリスト<オブジェクト>はリスト<?>に置き換えることができ、コンパイルできます
public void test(list <? }}
リスト<文字列>は、リスト<?>のサブクラスとして使用できます。リスト<?>は、任意のリストタイプの親クラスとして使用できます。
リスト<int>の代わりに<string>の親クラスになりたい場合はどうなりますか?このリストのように書きます<?文字列>を拡張します
C#では、これが制約のタイプです
クラスmyclass <t、u>ここで、t:class where u:struct {}インターフェイスImyInterface {} class dictionary <tkey、tval> Where tkey:iComparable、ienumerable where tval:imyinterface {public void add(tkey key、tval val){}}}Javaの制約された一般的なワイルドカードの上限:
// tタイプが数字クラスまたはそのサブクラスである必要があり、java.io.serializableインターフェイスパブリッククラスApple <t拡張番号&java.io.serializable> {}を実装する必要があることを示します。上記は、編集者が提起したJavaジェネリックワイルドカードとC#の比較と分析の完全な内容です。誰もがwulin.comをサポートすることを願っています〜