gpt4 book ai didi

java - 当参数是参数化类的参数化后代时类型安全警告

转载 作者:搜寻专家 更新时间:2023-11-01 03:53:16 24 4
gpt4 key购买 nike

我有一个带有签名的方法:

public static <T, E extends PxViewFull<T> > E create(Class<T> dtoClass, Class<E> viewClass) 

当我为参数化的第二个参数调用它时,我收到类型安全警告。方法调用:

private PxViewFull<Output40942DTO> output40813 = PxViewFull.create(Output40813DTO.class, ServiceOutputView.class);

ServiceOutputView 签名:

public class ServiceOutputView<T extends ServiceCall<?>> extends PxViewFull<T>

如何推断泛型类型参数以消除警告?

最佳答案

@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 中明确说明原因。

关于java - 当参数是参数化类的参数化后代时类型安全警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18106726/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com