2

抽象ファクトリ パターンでは、ジェネリックを使用しています。Serializable を拡張する BaseEntity インターフェイスがあり、Employee クラスは BaseEntity を実装します。抽象クラスには、この getJavaObj メソッドがあります

getJavaObj()Long empIdを受け取って返すメソッドです。Map<String, ? extends BaseEntity>

public abstract Map<String, ? extends BaseEntity> getJavaObj(Long id);

ジェネリックを使用して、それが提供するメインクラスでこれを実行しようとしています。

Map<String, Employee> emp = getJavaObj(empId);

このエラーが発生します Type safety: Unchecked cast from Map<String,capture#1-of ? extends BaseEntity>to Map

このように型キャストを行うと

Map<String, Employee> emp = (Map<String, Employee>)getJavaObj(empId);

この警告が表示されます

型の安全性: から Map への未チェックのキャスト型の安全性: からMap へMap<String,capture#1-of ? extends Serializable>の未チェックのキャストMap<String,capture#1-of ? extends BaseEntity>

型キャストを回避したり、型キャスト後でも警告を解決する方法はありますか? 私が返しているオブジェクトは、BaseEntity インターフェイスを介して Serializable に拡張されているためです。

4

1 に答える 1

2

ファクトリ メソッドを再定義します。

public abstract <T extends BaseEntity> Map<String, T> getJavaObj(Long id);

次に、キャストなしで正しい型を取得できます。

Map<String, Employee> emp = getJavaObj(empId);
于 2012-12-11T04:59:16.700 に答える