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

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

5
?のnull許容型の問題:条件演算子
これがC#.NET 2.0で機能する理由を誰かが説明できますか? Nullable<DateTime> foo; if (true) foo = null; else foo = new DateTime(0); ...しかし、これはしません: Nullable<DateTime> foo; foo = true ? null : new DateTime(0); 後者の形式では、「 '<null>'と 'System.DateTime'の間の暗黙的な変換がないため、条件式のタイプを判別できません。」というコンパイルエラーが発生します。 前者は使用できないというわけではありませんが、2番目のスタイルは他のコードとより一貫しています。


8
「Tの一般的な配列はvarargsパラメーターに対して作成されます」コンパイラー警告を解決することは可能ですか?
これは問題のコードの簡略化されたバージョンです。あるジェネリッククラスはジェネリック型パラメーターを持つ別のクラスを使用し、varargsパラメーターを持つメソッドにジェネリック型の1つを渡す必要があります。 class Assembler<X, Y> { void assemble(X container, Y... args) { ... } } class Component<T> { void useAssembler(T something) { Assembler<String, T> assembler = new Assembler<String, T>(); //generates warning: // Type safety : A generic array of T is // created for a varargs parameter assembler.assemble("hello", something); } } …
153 java  generics 

3
C#-1つのリスト内の複数のジェネリック型
これはおそらく不可能ですが、私はこのクラスを持っています: public class Metadata<DataType> where DataType : struct { private DataType mDataType; } それ以外にもありますが、簡単にしましょう。ジェネリック型(DataType)は、whereステートメントによって値型に制限されています。私がやりたいのは、さまざまなタイプ(DataType)のこれらのメタデータオブジェクトのリストを用意することです。といった: List<Metadata> metadataObjects; metadataObjects.Add(new Metadata<int>()); metadataObjects.Add(new Metadata<bool>()); metadataObjects.Add(new Metadata<double>()); これは可能ですか?
153 c#  generics 

6
リストに追加するにはどうすればよいですか?Number>データ構造を拡張しますか?
私はこのように宣言されたリストを持っています: List<? extends Number> foo3 = new ArrayList<Integer>(); 私はfoo3に3を追加しようとしました。ただし、次のようなエラーメッセージが表示されます。 The method add(capture#1-of ? extends Number) in the type List<capture#1-of ? extends Number> is not applicable for the arguments (ExtendsNumber)
153 java  generics 

7
Java Enumの定義
私はJavaのジェネリックをかなりよく理解していると思っていましたが、java.lang.Enumで次のことに遭遇しました。 class Enum<E extends Enum<E>> 誰かがこの型パラメーターを解釈する方法を説明できますか?同様の型パラメーターを使用できる場所の他の例を提供するためのボーナスポイント。
151 java  generics  enums  crtp 

3
C#で同等のJava Map
選択したキーでコレクション内のアイテムのリストを保持しようとしています。Javaでは、次のようにMapを使用します。 class Test { Map<Integer,String> entities; public String getEntity(Integer code) { return this.entities.get(code); } } これをC#で行う同等の方法はありますか? System.Collections.Generic.Hashsetハッシュを使用せず、カスタムタイプキーを定義できませ System.Collections.Hashtableん。ジェネリッククラスに System.Collections.Generic.Dictionaryはget(Key)メソッドがありません。
150 c#  java  generics  collections 

7
Java enumリテラルがジェネリック型パラメーターを持つことができないのはなぜですか?
Java列挙型は素晴らしいです。ジェネリックもそうです。もちろん、型消去のために後者の限界を知っています。しかし、理解できないことが1つあります。なぜ、このような列挙型を作成できないのですか。 public enum MyEnum<T> { LITERAL1<String>, LITERAL2<Integer>, LITERAL3<Object>; } このジェネリック型パラメーター<T>は、さまざまな場所で役立ちます。メソッドへのジェネリック型パラメーターを想像してください: public <T> T getValue(MyEnum<T> param); または列挙クラス自体でも: public T convert(Object o); より具体的な例#1 上記の例は一部にとって抽象的すぎるように見えるかもしれないので、これを行う理由のより現実的な例を次に示します。この例では、使用したい 列挙型。プロパティキーの有限セットを列挙できるため ジェネリックス。これは、プロパティレベルを格納するためのメソッドレベルの型安全性を持つことができる public interface MyProperties { public <T> void put(MyEnum<T> key, T value); public <T> T get(MyEnum<T> key); } より具体的な例#2 データ型の列挙があります: public interface DataType<T> {} public enum SQLDataType<T> …
148 java  generics  enums 

4
(co-、contra-、in-)分散がどのように機能するのか、例ではコンパイルできないのはなぜですか?
この質問に続いて、誰かがScalaで次のことを説明できますか? class Slot[+T] (var some: T) { // DOES NOT COMPILE // "COVARIANT parameter in CONTRAVARIANT position" } 型宣言の+Tとの違いを理解してTいます(を使用するとコンパイルされますT)。しかし、その後どのように一つは、実際のものを作成するに頼ることなく、その型パラメータで共変であるクラス記述んunparametrizedを?以下がのインスタンスでのみ作成できることをどのように確認できますTか? class Slot[+T] (var some: Object){ def get() = { some.asInstanceOf[T] } } 編集 -これは次のようになりました: abstract class _Slot[+T, V <: T] (var some: V) { def getT() = { some } } …

9
<の違いは何ですか?スーパーE>と<?E>?
違いは何である&lt;? super E&gt;とは&lt;? extends E&gt;? たとえば、クラスを見るjava.util.concurrent.LinkedBlockingQueueと、コンストラクタに次のシグネチャがあります。 public LinkedBlockingQueue(Collection&lt;? extends E&gt; c) そしてメソッドのために: public int drainTo(Collection&lt;? super E&gt; c)
147 java  generics 


5
クラス型を関数パラメーターとして渡す方法
Webサービスを呼び出し、JSON応答をシリアル化してオブジェクトに戻す汎用関数があります。 class func invokeService&lt;T&gt;(service: String, withParams params: Dictionary&lt;String, String&gt;, returningClass: AnyClass, completionHandler handler: ((T) -&gt; ())) { /* Construct the URL, call the service and parse the response */ } 私が達成しようとしているのは、このJavaコードに相当するものです public &lt;T&gt; T invokeService(final String serviceURLSuffix, final Map&lt;String, String&gt; params, final Class&lt;T&gt; classTypeToReturn) { } 私のメソッド署名は、私が達成しようとしているものの正しいですか? より具体的にはAnyClass、パラメーター型として指定することは正しいことですか? メソッドを呼び出すMyObject.selfと、returningClass値として渡していますが、「式のタイプ '()'をタイプ …

5
JavaがThrowableのジェネリックサブクラスを許可しないのはなぜですか?
Java Language Sepecification、第3版によると: ジェネリッククラスがの直接または間接サブクラスである場合、コンパイル時エラーになりますThrowable。 この決定がなされた理由を理解したいと思います。一般的な例外の何が問題になっていますか? (私が知る限り、ジェネリックは単にコンパイル時の構文糖でありObject、.classファイル内でとにかく翻訳されるので、ジェネリッククラスを効果的に宣言することは、すべてがであるかのように行われますObject。間違っている場合は修正してください。)

6
タイプ 'T'の値は変換できません
これはおそらく初心者の質問ですが、グーグルは意外にも答えを提供しませんでした。 私はこのかなり人工的な方法を持っています T HowToCast&lt;T&gt;(T t) { if (typeof(T) == typeof(string)) { T newT1 = "some text"; T newT2 = (string)t; } return t; } C ++の背景から来たので、これが機能することを期待していました。ただし、上記の両方の割り当てで、「タイプ 'T'を暗黙的に文字列に変換できない」および「タイプ 'T'を文字列に変換できない」でコンパイルできません。 私は概念的に間違っていることをしているのか、単に間違った構文を持っています。これを整理するのを手伝ってください。 ありがとうございました!
146 c#  .net  generics  casting 

10
Javaコレクションでメソッドが削除されないのはなぜですか?
なぜではない Collection.remove(Object o)でジェネリックでですか? のように思える Collection&lt;E&gt;持っているboolean remove(E o); 次に、誤って(たとえば)Set&lt;String&gt;から個々の文字列を削除しようとするCollection&lt;String&gt;と、後でデバッグの問題が発生する代わりに、コンパイル時エラーになります。

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