私はこの2つのインターフェースを持っています:
public interface Attribute<N> {
Class<N> getAttributeType();
}
public interface FieldSubscriber<N> {
void notifySubscriber(N value);
}
これで、さまざまな種類の Fields リレーションを処理する FieldRelationsManager クラスができました。たとえば、FieldSubscriber がサブスクライブして、値ホルダーの値の変更を通知できるサブスクリプション機能を提供します。したがって、マネージャーは、通知する必要があるサブスクリプションを知るために、特定の属性の FieldSubscribers のリストを必要とします。したがって、FieldRelationsManager は次のようになります。
public class FieldRelationsManager {
private Map<Attribute<?>, List<FieldSubscriber<?>>> subscribers;
.....
.....
}
マネージャーのクライアントが同じ N の属性に FieldSubscriptor を提供することを保証するために、次のようなメソッドを提供しようとしています。
public <N> void subscribe(Attribute<N> attr, FieldSubscriber<N> subscriber){
if(subscribers==null){
subscribers=new HashMap<Attribute<?>, List<FieldSubscriber<?>>>();
}
List<FieldSubscriber<N>> list=subscribers.get(attr);
....
....
}
これは次の理由でコンパイルされません。戻り値:
List<FieldSubscriber<?>>
以下にキャストすることはできません。
List<FieldSubscriber<N>>
問題は、 N パラメータが同じであることを保証するためにこれをコーディングできる他の方法はありますか?