@Paul Bellora 回答了您的问题。
ServiceOutputView.class 的类型是 Class[ServiceOutputView[?]] 并且您在调用站点的参数需要 Class[ServiceOutputView[Output40942DTO]],因此当您尝试将 Class[ServiceView[?] 传递给 Class 时,您会得到一个未经检查的方法调用异常[ServiceOutputView[Output40942DTO]] 这是您的方法类型参数告诉它所期望的。
更新:这是一种不会发出警告的安排:
public class Parameter {
public static void main(String... args) throws Exception {
PxViewFull<OutputDTO> output40813 = PxViewFull.create(OutputDTO.class, ServiceOutputView.class);
}
}
class ServiceCall<X> {
}
class OutputDTO extends ServiceCall<OutputDTO> {
public OutputDTO serviceCall() {
// i guess i pupulate myself?
return this;
}
}
class PxViewFull<X> {
private X dtoObject;
private Class<X> dtoObjectType;
public static <P1, P2 extends PxViewFull<?>, RESULT extends PxViewFull<P1>> RESULT create(
Class<P1> dtoClass,
Class<P2> viewClass) throws Exception {
return null;
}
public void setDtoObjectType(final Class<X> dtoObjectType) {
this.dtoObjectType = dtoObjectType;
}
public void setModel(Object o) {
if (!dtoObjectType.isInstance(o))
throw new IllegalArgumentException();
this.dtoObject = dtoObjectType.cast(o);
}
}
class ServiceOutputView<T extends ServiceCall<?>> extends PxViewFull<T> {
}
create 方法必须包含一个未经检查的强制转换,最好的办法就是在其上打一个 @SuppressWarning 并确保在该方法的 javadoc 中明确说明原因。