タグ付けされた質問 「type-safety」


10
タイプセーフ:未チェックのキャスト
私の春のアプリケーションコンテキストファイルには、次のようなものがあります。 <util:map id="someMap" map-class="java.util.HashMap" key-type="java.lang.String" value-type="java.lang.String"> <entry key="some_key" value="some value" /> <entry key="some_key_2" value="some value" /> </util:map> Javaクラスでは、実装は次のようになります。 private Map<String, String> someMap = new HashMap<String, String>(); someMap = (HashMap<String, String>)getApplicationContext().getBean("someMap"); Eclipseでは、次のような警告が表示されます。 型の安全性:ObjectからHashMapへの未チェックのキャスト 何を間違えたのですか?どうすれば問題を解決できますか?


11
文字列からのジェネリック型変換
別のクラスの「プロパティ」を保存するために使用したいクラスがあります。これらのプロパティは名前と値を持つだけです。理想的には、型付きのプロパティを追加できるようにして、返される「値」が常に希望する型になるようにします。 タイプは常にプリミティブである必要があります。このクラスは、基本的に名前と値を文字列として格納する抽象クラスをサブクラス化します。このサブクラスは、基本クラスに型の安全性を追加する(そして、いくつかの変換で私を救う)という考えです。 だから、私は(おおよそ)これであるクラスを作成しました: public class TypedProperty<DataType> : Property { public DataType TypedValue { get { // Having problems here! } set { base.Value = value.ToString();} } } だから問題は: 文字列からプリミティブに戻す「一般的な」方法はありますか? 変換を全面的にリンクする汎用インターフェイスを見つけることができないようです(ITryParsableのようなものが理想的でした!)。

15
C#の差別化された組合
[注:この質問の元のタイトルは「C#でのC(ish)スタイルの共用体」でしたが、Jeffのコメントで通知されたように、この構造は明らかに「差別化された共用体」と呼ばれます] この質問の冗長さをすみません。 すでにSOで採掘している同様の適切な質問がいくつかありますが、それらは組合のメモリ節約の利点または相互運用にそれを使用することに集中しているようです。 ここにそのような質問の例があります。 ユニオン型のものを作りたいという私の願望は少し異なります。 現在、このようなオブジェクトを生成するコードを書いています public class ValueWrapper { public DateTime ValueCreationDate; // ... other meta data about the value public object ValueA; public object ValueB; } かなり複雑なものだと思います。ことはValueA、いくつかの特定のタイプ(たとえばstring、intとFoo(これはクラスです)にValueBすることができ、別の小さなタイプのセットにすることができます。これらの値をオブジェクトとして扱うのは好きではありません(暖かくて心地よい感じが欲しい)タイプセーフのビットでコーディング)。 そのため、ValueAが論理的に特定の型への参照であるという事実を表現するために、ささいな小さなラッパークラスを書くことを考えました。私Unionが達成しようとしていることがCの組合の概念を思い出させたので、クラスを呼び出しました。 public class Union<A, B, C> { private readonly Type type; public readonly A a; public readonly B b; public readonly …

14
C#で、List <string>オブジェクトをList <object>変数に格納できないのはなぜですか
ListオブジェクトをC#のList変数に格納することはできず、そのように明示的にキャストすることもできないようです。 List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = sl; 結果は、型System.Collections.Generic.List&lt;string&gt;を暗黙的に変換できませんSystem.Collections.Generic.List&lt;object&gt; その後... List&lt;string&gt; sl = new List&lt;string&gt;(); List&lt;object&gt; ol; ol = (List&lt;object&gt;)sl; 結果はタイプSystem.Collections.Generic.List&lt;string&gt;をに変換できませんSystem.Collections.Generic.List&lt;object&gt; もちろん、文字列リストからすべてを引き出して一度に1つずつ戻すことでそれを行うことができますが、それはかなり複雑な解決策です。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.