这是我想在我的java代码中编写的内容:
private <A extends Action<R>, R extends Result> MyType<A,R> member;
然而,这是无效的语法。所以我最终写道:
private MyType<? extends Action<? extends Result>, ? extends Result> member;
但这忽略了两个类都派生于的事实Result
是相同的。我的类方法都强制执行这种关系,因此我可以确定 MyType 强制执行它,但我仍然必须不安全地进行类型转换member
在某些情况下。
更多细节
这是我想要做的事情的精确版本,尽管它要复杂得多:
我希望我能做到:
private <A extends Action<R>, R extends Result>
Map< Class<A>, ActionHandler<A,R> > handlers;
相反,我必须这样做:
private Map< Class< ? extends Action<? extends Result> >,
ActionHandler<? extends Action<? extends Result>,
? extends Result> > handlers;
我的方法强制执行所需的关系,如下所示:
public <A extends Action<R>, R extends Result> void addHandler(
ActionHandler<A, R> handler ) {
handlers.put( handler.getActionType(), handler );
}
我想要以下方法:
public <A extends Action<R>, R extends Result> ActionHandler<A, R>
findHandler( A action ) {
return handlers.get( action.getClass() );
}
但这不起作用:我必须添加演员阵容和@SuppressWarnings("unchecked")
.
我尝试过的事情
我尝试为此目的创建一个新类:
public class MyMap <A extends Action<R>, R extends Result> extends
HashMap< Class<A>, ActionHandler<A,R> > { ... }
MyMap< ?, ? > handlers;
但这没用,我还需要演员。