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

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



4
Javaジェネリッククラスを作成する場合、山括弧のチルダは何を意味しますか?
私はいくつかのJMockitの例を読んでいて、このコードを見つけました: final List<OrderItem> actualItems = new ArrayList<~>(); 一般的な識別子のチルダは何を意味しますか?単項ビット単位のNOT演算子であることはわかっていますが、ここにはオペランドがありません。 また、コンパイルしてみたところエラーになりました。何か足りないのですか?

8
JavaジェネリックT対オブジェクト
次の2つのメソッド宣言の違いは何ですか。 public Object doSomething(Object obj) {....} public <T> T doSomething(T t) {....} 一方でできる/できることはありますか?このサイトの他の場所でこの質問を見つけることができませんでした。
127 java  generics 

5
Goにジェネリックがないのはなぜですか?
免責事項:私はGoで1日しか遊んだことがないので、多くの機会を逃した可能性があります。 Goでジェネリック/テンプレート/ whatsInANameが実際にサポートされていない理由を誰かが知っていますか?つまり、ジェネリックがありますが、それはmapコンパイラーによって提供されますが、Goプログラマーは独自の実装を作成できません。Goをできるだけ直交にすることについてのすべての話で、なぜジェネリック型を使用できるが、新しい型を作成できないのですか? 特に関数型プログラミングに関して言えば、ラムダやクロージャさえありますが、静的型システムにジェネリックが欠けている場合、どうすれば一般的な高次関数を作成できfilter(predicate, list)ますか?わかりました。リンクされたリストなどは、interface{}タイプセーフを犠牲にして実行できます。 SO / Googleでクイック検索を行っても洞察は得られなかったため、ジェネリックがあったとしても、後から考えてGoに追加されるようです。私はThompsonがJavaの人よりもはるかに優れていると信じていますが、なぜジェネリックスを除外するのですか?または、それらは計画されていて、まだ実装されていませんか?

3
プロトコルはそれ自体に準拠していませんか?
このSwiftコードがコンパイルされないのはなぜですか? protocol P { } struct S: P { } let arr:[P] = [ S() ] extension Array where Element : P { func test<T>() -> [T] { return [] } } let result : [S] = arr.test() コンパイラーは、「タイプPがプロトコルに準拠していませんP」(または、Swiftの以降のバージョンでは、「プロトコル 'P'に準拠する具体的なタイプとして 'P'を使用することはサポートされていません。」)と述べています。 何故なの?これはどういうわけか、言語の穴のように感じます。問題はarr、配列をプロトコルタイプの配列として宣言することに起因することを認識していますが、それは不合理なことですか?タイプ階層のようなものを構造体に提供するのに役立つプロトコルは正確にあると思いましたか?

5
Javaのジェネリック型パラメーターの命名規則(複数の文字を使用)?
一部のインターフェイスでは、コードを読みやすくするために、ジェネリック型パラメーターに複数の文字を使用して名前を付けたいと思っています。 何かのようなもの.... Map<Key,Value> これの代わりに... Map<K,V> しかし、メソッドに関しては、型パラメーターはjava-classesのように見え、これも混乱を招きます。 public void put(Key key, Value value) KeyとValueはクラスのようです。私はいくつかの表記法を見つけたり、考えたりしましたが、Sunの慣習や一般的なベストプラクティスのようなものはありませんでした。 私が推測または見つけた代替案... Map<KEY,VALUE> Map<TKey,TValue>

6
IEnumerable <T>を実装する方法
次のように、非ジェネリックIEnumerableを実装する方法を知っています。 using System; using System.Collections; namespace ConsoleApplication33 { class Program { static void Main(string[] args) { MyObjects myObjects = new MyObjects(); myObjects[0] = new MyObject() { Foo = "Hello", Bar = 1 }; myObjects[1] = new MyObject() { Foo = "World", Bar = 2 }; foreach (MyObject x in myObjects) …
124 c#  .net  generics 

2
「プロトコル…自己または関連する型の要件があるため、一般的な制約としてのみ使用できます」とはどういう意味ですか?
Swiftのカスタムプロトコルをキーにしたディクショナリ(実際にはHashSet)を作成しようとしていますが、タイトルにエラーがあります。 プロトコル 'myProtocol'は、Selfまたは関連する型の要件があるため、一般的な制約としてのみ使用できます 頭も尻尾も作れません。 protocol Observing: Hashable { } var observers = HashSet&lt;Observing&gt;()

8
ジェネリックメソッドを使用する場合とワイルドカードを使用する場合
OracleDocGenericMethodのジェネリックメソッドについて読んでいます。ワイルドカードをいつ使用するか、ジェネリックメソッドをいつ使用するかについての比較について、私はかなり混乱しています。文書からの引用。 interface Collection&lt;E&gt; { public boolean containsAll(Collection&lt;?&gt; c); public boolean addAll(Collection&lt;? extends E&gt; c); } 代わりに、ここでジェネリックメソッドを使用することもできます。 interface Collection&lt;E&gt; { public &lt;T&gt; boolean containsAll(Collection&lt;T&gt; c); public &lt;T extends E&gt; boolean addAll(Collection&lt;T&gt; c); // Hey, type variables can have bounds too! } […]これは、型引数がポリモーフィズムに使用されていることを示しています。その唯一の効果は、さまざまな呼び出しサイトでさまざまな実際の引数タイプを使用できるようにすることです。その場合は、ワイルドカードを使用する必要があります。ワイルドカードは、柔軟なサブタイピングをサポートするように設計されています。これは、ここで表現しようとしているものです。 ワイルドカードのような(Collection&lt;? extends E&gt; c);ものも一種の多態性をサポートしていると思いませんか?では、ジェネリックメソッドの使用がこれで良くないと見なされるのはなぜですか 続けて、それは述べています、 ジェネリックメソッドを使用すると、型パラメーターを使用して、メソッドへの1つまたは複数の引数の型やその戻り値の型間の依存関係を表すことができます。このような依存関係がない場合は、ジェネリックメソッドを使用しないでください。 これは何を意味するのでしょうか? 彼らは例を提示しました class …
122 java  generics  wildcard 

5
オブジェクトのフィールドを汎用ディクショナリキーとして使用する
オブジェクトをのキーとして使用したい場合Dictionary、特定の方法でオブジェクトを比較するには、どのメソッドをオーバーライドする必要がありますか? プロパティを持つクラスがあるとします: class Foo { public string Name { get; set; } public int FooID { get; set; } // elided } そして私は作りたいです: Dictionary&lt;Foo, List&lt;Stuff&gt;&gt; 私が欲しいFooと同じとオブジェクトがFooID同じグループ検討します。Fooクラスでどのメソッドをオーバーライドする必要がありますか? まとめるとStuff、Fooオブジェクトをオブジェクト別にグループ化したリストに分類したいと思います。Stuffオブジェクトには、FooIDそれらをカテゴリにリンクするためのa があります。

11
float値をテンプレートパラメータとして使用できないのはなぜですか?
floatテンプレートパラメータとして使用しようとすると、コンパイラはこのコードを要求しますが、int正常に動作します。 floatテンプレートパラメーターとして使用できないからでしょうか? #include&lt;iostream&gt; using namespace std; template &lt;class T, T defaultValue&gt; class GenericClass { private: T value; public: GenericClass() { value = defaultValue; } T returnVal() { return value; } }; int main() { GenericClass &lt;int, 10&gt; gcInteger; GenericClass &lt; float, 4.6f&gt; gcFlaot; cout &lt;&lt; "\n sum of integer is …

6
'IList'対 'ICollection'対 'Collection'を返す
パブリックAPIのメソッドとプロパティからどのコレクション型を返すべきか混乱しています。 私が念頭に置いているコレクションはIList、ICollectionとCollectionです。 これらのタイプの1つを返すことは常に他のタイプよりも優先されますか、それとも特定の状況に依存しますか?
119 c#  .net  generics  collections 

4
ジェネリック基本クラスから継承し、制約を適用して、C#でインターフェイスを実装する
これは構文の質問です。ジェネリック基本クラスから継承し、型パラメーターの1つに制約を適用しているジェネリッククラスがあります。派生クラスにインターフェイスを実装することも必要です。私の人生では、正しい構文を理解できていないようです。 これは私が持っているものです: DerivedFoo&lt;T1,T2&gt; : ParentFoo&lt;T1, T2&gt; where T2 : IBar { ... } 最初に頭に浮かんだのはこれです。 DerivedFoo&lt;T1,T2&gt; : ParentFoo&lt;T1, T2&gt; where T2 : IBar, IFoo { ... } しかし、これはT2がIFooを実装するためにDerivedFooではなくIBarとIFooの両方を実装する必要があるため、正しくありません。 私はグーグル、コロン、セミコロンの使用などを少し試しましたが、短くなりました。答えはきっと簡単です。

6
メソッドの戻り型がVoidの場合、何を返しますか?(無効ではありません!)
JavaでGenericsを使用しているため、Void戻り値の型として関数を実装する必要がありました。 public Void doSomething() { //... } そしてコンパイラは私が何かを返すことを要求します。nullとりあえず戻るだけですが、それが良いコーディング方法かどうか疑問に思っています... 私は約求めているVではない、OID V OID。予約されたキーワードVoidではなく、クラスvoid。 私も試してみたVoid.class、void、Void.TYPE、new Void()、すべてでは動作しませんノーすべてのリターンが、すべて。(多かれ少なかれ明白な理由で)(詳細についてはこの回答を参照してください) それで、関数の戻り値の型が何である場合、私は何を返すことになっていVoidますか? Voidクラスの一般的な用途は何ですか?
115 java  generics  void 

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