タグ付けされた質問 「generics」

ジェネリックスは、.NET言語、Java、Swift、Rustなどのさまざまな言語に見られるパラメトリックポリモーフィズムの形式です。

20
オブジェクトのプロパティでList <T>を並べ替える方法
私はと呼ばれるクラスの持っているOrderような特性を有しているOrderId、OrderDate、Quantity、とTotal。このOrderクラスのリストがあります: List&lt;Order&gt; objListOrder = new List&lt;Order&gt;(); GetOrderList(objListOrder); // fill list of orders 次に、Orderオブジェクトの1つのプロパティに基づいてリストを並べ替えます。たとえば、注文日または注文IDで並べ替える必要があります。 C#でこれを行うにはどうすればよいですか?
1249 c#  generics  list  sorting 

21
Tを列挙型に制限するジェネリックメソッドを作成する
Enum.Parseという概念を拡張する関数を構築しています Enum値が見つからない場合にデフォルト値を解析できるようにします 大文字と小文字は区別されません だから私は以下を書きました: public static T GetEnumFromString&lt;T&gt;(string value, T defaultValue) where T : Enum { if (string.IsNullOrEmpty(value)) return defaultValue; foreach (T item in Enum.GetValues(typeof(T))) { if (item.ToString().ToLower().Equals(value.Trim().ToLower())) return item; } return defaultValue; } エラー制約は特別なクラスにはできませんSystem.Enum。 十分に公平ですが、Generic Enumを許可する回避策はありますか、またはParse関数を模倣して型を属性として渡す必要があります。これにより、醜いボックス化の要件がコードに強制されます。 編集以下のすべての提案は感謝されています。 解決しました(大文字と小文字を区別しないようにループを抜けました-XMLの解析時にこれを使用しています) public static class EnumUtils { public static T ParseEnum&lt;T&gt;(string value, T …

30
Javaでジェネリック配列を作成する方法は?
Javaジェネリックの実装のため、次のようなコードは使用できません。 public class GenSet&lt;E&gt; { private E a[]; public GenSet() { a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation } } タイプセーフを維持しながらこれをどのように実装できますか? Javaフォーラムで次のような解決策を見ました。 import java.lang.reflect.Array; class Stack&lt;T&gt; { public Stack(Class&lt;T&gt; clazz, int capacity) { array = (T[])Array.newInstance(clazz, capacity); } private final T[] array; } しかし、私は本当に何が起こっているのかわかりません。

8
リフレクションを使用してジェネリックメソッドを呼び出すにはどうすればよいですか?
型パラメーターがコンパイル時に不明であるが、実行時に動的に取得される場合にジェネリックメソッドを呼び出す最善の方法は何ですか? 次のサンプルコードについて考えてみましょう。Example()メソッド内で、変数に格納されたものをGenericMethod&lt;T&gt;()使用して呼び出す最も簡潔な方法は何ですか。TypemyType public class Sample { public void Example(string typeName) { Type myType = FindType(typeName); // What goes here to call GenericMethod&lt;T&gt;()? GenericMethod&lt;myType&gt;(); // This doesn't work // What changes to call StaticMethod&lt;T&gt;()? Sample.StaticMethod&lt;myType&gt;(); // This also doesn't work } public void GenericMethod&lt;T&gt;() { // ... } public static void …
1071 c#  .net  generics  reflection 

17
List <Dog>はList <Animal>のサブクラスですか?Javaジェネリックが暗黙的にポリモーフィックでないのはなぜですか?
Javaジェネリックスが継承/ポリモーフィズムをどのように処理するかについて少し混乱しています。 次の階層を想定- 動物(親) 犬 - 猫(子供) それで私がメソッドを持っているとしましょうdoSomething(List&lt;Animal&gt; animals)。継承とポリモーフィズムのすべてのルールでは、私はそれを引き受けるList&lt;Dog&gt; さList&lt;Animal&gt;とList&lt;Cat&gt; あるList&lt;Animal&gt;ので、どちらかがこのメソッドに渡すことができます- 。そうではありません。この動作を実現したい場合は、と言って、Animalのサブクラスのリストを受け入れるようにメソッドに明示的に指示する必要がありますdoSomething(List&lt;? extends Animal&gt; animals)。 これはJavaの動作であることを理解しています。私の質問はなぜですか?なぜポリモーフィズムは一般的に暗黙的ですが、ジェネリックになるとそれを指定する必要がありますか?

14
PECS(Producer Extends Consumer Super)とは何ですか?
OverаэтотвопросестьответынаStack Overflowнарусском:wildспользованиеwildcardвGenerics Java ジェネリックを読んでいるときにPECS(プロデューサーextendsとコンシューマーのsuper略)に出会いました。 extendsとの間の混乱を解決するためにPECSを使用する方法を誰かに説明できますかsuper?


16
ジェネリッククラスまたはメソッドのメンバーからTの型を取得するにはどうすればよいですか?
クラスまたはメソッドにジェネリックメンバーがあるとしましょう。 public class Foo&lt;T&gt; { public List&lt;T&gt; Bar { get; set; } public void Baz() { // get type of T } } クラスをインスタンス化すると、はにTなるMyTypeObject1ので、クラスには一般的なリストプロパティがありますList&lt;MyTypeObject1&gt;。同じことが非ジェネリッククラスのジェネリックメソッドにも当てはまります。 public class Foo { public void Bar&lt;T&gt;() { var baz = new List&lt;T&gt;(); // get type of T } } 私のクラスのリストに含まれるオブジェクトのタイプを知りたいのですが。したがって、呼び出されたリストプロパティBarまたはローカル変数bazには、どのようなタイプが含まれていTますか? Bar[0].GetType()リストに要素が含まれていない可能性があるため、私はできません。どうすればできますか?
674 c#  .net  generics 


23
未チェックのキャスト警告に対処するにはどうすればよいですか?
Eclipseから次のような警告が出されます。 型の安全性:ObjectからHashMapへの未チェックのキャスト これは、Objectを返すAPIの制御からの呼び出しによるものです。 HashMap&lt;String, String&gt; getItems(javax.servlet.http.HttpSession session) { HashMap&lt;String, String&gt; theHash = (HashMap&lt;String, String&gt;)session.getAttribute("attributeKey"); return theHash; } 理論的には少なくとも潜在的なコードの問題を示しているため、できればEclipseの警告は避けたいと思います。しかし、私はこれを取り除く良い方法をまだ見つけていません。メソッドに含まれる1行だけを抽出し@SuppressWarnings("unchecked")てそのメソッドに追加することで、警告を無視するコードブロックの影響を制限できます。より良いオプションはありますか?Eclipseでこれらの警告をオフにしたくありません。 コードにたどり着く前は、それはより単純でしたが、それでも警告を引き起こしました。 HashMap getItems(javax.servlet.http.HttpSession session) { HashMap theHash = (HashMap)session.getAttribute("attributeKey"); return theHash; } あなたがハッシュを使用しようとしたときに警告が出るだろう他の場所に問題がありました: HashMap items = getItems(session); items.put("this", "that"); Type safety: The method put(Object, Object) belongs to the raw type HashMap. References …
611 java  generics  warnings 


19
メソッドの戻り値の型をジェネリックにする方法を教えてください。
次の例を考えてみてください(OOPブックでは一般的です)。 私にはAnimalクラスがあり、それぞれにAnimal多くの友達がいます。 好きなサブクラスDog、Duck、Mouseのような特定の動作を追加などbark()、quack()など ここにAnimalクラスがあります: public class Animal { private Map&lt;String,Animal&gt; friends = new HashMap&lt;&gt;(); public void addFriend(String name, Animal animal){ friends.put(name,animal); } public Animal callFriend(String name){ return friends.get(name); } } そして、ここにたくさんの型キャストがあるコードスニペットがあります: Mouse jerry = new Mouse(); jerry.addFriend("spike", new Dog()); jerry.addFriend("quacker", new Duck()); ((Dog) jerry.callFriend("spike")).bark(); ((Duck) jerry.callFriend("quacker")).quack(); 型キャストを取り除くために戻り値の型にジェネリックスを使用できる方法はありますか? jerry.callFriend("spike").bark(); jerry.callFriend("quacker").quack(); 以下に、使用されないパラメーターとしてメソッドに返される戻り値の型を含む初期コードをいくつか示します。 …

27
Javaでジェネリック型のインスタンスを作成しますか?
Javaでジェネリック型のインスタンスを作成することは可能ですか?私が見たものに基づいて考えています。答えはno(型消去のため)である、誰かが私が欠けているものを見ることができるかどうか興味があります: class SomeContainer&lt;E&gt; { E createContents() { return what??? } } 編集:私の問題を解決するためにスーパータイプトークンを使用できることがわかりましたが、以下の回答のいくつかが示しているように、多くのリフレクションベースのコードが必要です。 Ian RobertsonのArtima Articleとは劇的に異なるものを誰かが思い付くかどうかを確認するために、これを少しの間開いたままにします。
576 java  generics 

13
C#でジェネリックメソッドからNULLを返すにはどうすればよいですか?
私はこの(ダミー)コードを持つジェネリックメソッドを持っています(はい、IListに述語があることを認識していますが、私のコードはIListを使用していませんが、他のいくつかのコレクションを使用しています。とにかくこれは質問には関係ありません...) static T FindThing&lt;T&gt;(IList collection, int id) where T : IThing, new() { foreach T thing in collecion { if (thing.Id == id) return thing; } return null; // ERROR: Cannot convert null to type parameter 'T' because it could be a value type. Consider using 'default(T)' instead. } これは私にビルドエラーを与えます …
546 c#  generics 

7
C#がジェネリック属性タイプを禁止するのはなぜですか?
これにより、コンパイル時の例外が発生します。 public sealed class ValidatesAttribute&lt;T&gt; : Attribute { } [Validates&lt;string&gt;] public static class StringValidation { } C#は一般的な属性をサポートしていないことに気づきました。しかし、グーグルで何度も調べた結果、理由がわかりません。 ジェネリック型から派生できない理由を誰かが知っていますAttributeか?理論は?

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.