我有以下方法
angular.module("MyApp", [])
.run(["$rootScope", (root: {}) => {
function registerSwitchers(...enumInfos: [string, { [value: number]: string }][]) {
enumInfos.forEach(enumInfo => {
var switcherName = enumInfo[0]
var enumType = enumInfo[1]
root[switcherName] = (value: any, cases: { [value: string]: any }) => cases[enumType[value]];
});
}
registerSwitchers(
["switchMyEnum1", MyEnum1],
["switchMyEnum2", MyEnum2]);
}])
我调用此方法来获取错误资源
private ResponseEntity<? extends ResourceSupport> createResponse(boolean isError) {
if(isError){
return new ResponseEntity<ErrorResource>((ErrorResource) new ErrorResource());
}
return new ResponseEntity<ResourceSupport>(new ResourceSupport());
}
当我这样做时,我收到此错误:
ResponseEntity<ErrorResource> e = (ResponseEntity<ErrorResource>) createResponse(logoutResult, userId);
System.out.println(e.getError());
有没有办法在不抑制错误消息的情况下强制转换对象?
答案 0 :(得分:3)
您使用相同的方法返回apple和oranges实例。在运行时,由于java的类型擦除,系统无法知道是否允许该转换,因此警告。你有2种方法可以避免它:
a)创建两种不同的方法:
for (i=0,j=1; j < len; i++,j++) {
b)通过将实际的private ResponseEntity<ResourceSupport> createResponse() {
return new ResponseEntity<ResourceSupport>(new ResourceSupport());
}
private ResponseEntity<ErrorResource> createErrorResponse() {
return new ResponseEntity<ErrorResource>(new ErrorResource());
}
实例作为参数传递来使方法完全通用:
ResourceSupport
答案 1 :(得分:0)
解决方案是:不要尝试转换为ResponseEntity<ResourceSupport>
,但保留类似ResponseEntity<? extends ResourceSupport>
的类型:
ResponseEntity<? extends ResourceSupport> e = createResponse(logoutResult, userId);
System.out.println(e.getError());
类型为ResponseEntity<ErrorResource>
,ResponseEntity<ResourceSupport>
无法分配给彼此(尝试一下)。
但是您的原始代码试图这样做 - 如果没有错误,您的createResponse
方法会返回new ResponseEntity<ResourceSupport>(new ResourceSupport())
,但您尝试将其转换为ResponseEntity<ErrorResource>
,这是不允许的。