Java Genericsの新機能です。しかし、私は多くのサマリーリンクと例を読んだ。しかし、私は最も簡単な方法を得ることができません。私はsomenoeが助けることを望みます:Javaジェネリックスで安全でないキャストの警告を避けるには
定義されていないオブジェクトを別のオブジェクトにマップするHashMapを作成します。両方のオブジェクトは、StringまたはIntegerのいずれかです。
だから私は、この書いた:これまでのところは良い
private final HashMap<L, R> left2Right = new HashMap<L, R>();
Extractor<?> extLeft = Extractor.getInstance(0);
Extractor<?> extRight = Extractor.getInstance(1);
L leftVal = extLeft.extract(d, i);
R rightVal = extRight.extract(d, i);
this.left2Right.put(leftVal, rightVal);
を...しかし、私は、抽出-オブジェクトを実装する問題を抱えています。それらは工場のパターンによってインスタンス化される。
abstract class Extractor<E> {
abstract E extract(DTable source, int row);
static <E> Extractor<E> getInstance(int type) {
if(type == 0)
return new IntExtractor();
else
return new StringExtractor();
}
}
class IntExtractor extends Extractor<Integer> {
@Override
Integer extract(DTable source, int row) {
int value = 5;
return new Integer(value);
}
}
class StringExtractor extends Extractor<String> {
@Override
String extract(DTable source, int row) {
String retVal = "hello";
return retVal;
}
}
それはコンパイルが、私は私が間違っているのは何E.に整数/文字列をキャストにUNSAVEキャストの警告を得る:私はこのようにそれをしなかった(simplyfied)?私は知っている、私は単に警告を抑えることができます。しかし、私はこれがJavaのジェネリックの利点であるべきだと思ったのですか?私はこのタイプのキャストを保存することはできません。私は知らないので、「E」タイプは本当に「...」です。
何か基本的に間違っていますか?
注: 私は最初の回答からいくつかの情報を使用した後、私は「新しい」という質問への私のコードを編集した...
私はこの問題にあるすべてを私たちに言っていないと感じています... – Bombe