【发布时间】:2014-10-14 20:55:20
【问题描述】:
我有ErrorFactory 类,它基于错误代码创建不同类型错误的实例。我还有Output 类,它可能包含其中一种错误类型。
下面的代码显示了我如何尝试使用它,但不幸的是出错了。你能帮我弄清楚那里有什么问题并提出更好的设计建议吗?谢谢你的帮助!
OutputLike output = new OutputLike();
ErrorFactory errorFactory = new ErrorFactory();
int errorCode = ((Long)error.get("error_code")).intValue();
output.setError(errorFactory.<Error>getError(errorCode, error));
Error:(97, 27) java: method setError in class com.electronsoftware.VKLiker.responseoutput.output.Output<T> cannot be applied to given types;
required: com.electronsoftware.VKLiker.error.Error
found: java.lang.Object
reason: actual argument java.lang.Object cannot be converted to com.electronsoftware.VKLiker.error.Error by method invocation conversion
======
public class ErrorFactory <T extends Error> {
public <T> T getError(int error_code, JSONObject errorBody){
Error.ErrorType errorType = Error.ErrorType.values()[error_code];
switch(errorType){
case CAPTCHA_NEEDED:{
return (T) Parser.parseCaptchaRequiredError(errorBody);
}
case USER_AUTHORIZATION_FAILED:{
break;
}
case TOO_MANY_REQUESTS:{
break;
}
case NOT_ENOUGH_PERMISSIONS:{
break;
}
case UNKNOWN:{
break;
}
}
return null;
}
}
====
public class OutputLike <E extends Error> extends Output <E> {
....
}
public abstract class Output <T extends Error> {
private boolean isError;
private T error;
public boolean isError(){
return this.isError;
}
public T getError(){
return this.error;
}
public void setError(T error){
this.error = error;
}
}
====
public static ErrorCaptchaRequired parseCaptchaRequiredError(JSONObject error){
ErrorCaptchaRequired captchaError = null;
....
captchaError = new ErrorCaptchaRequired(msg, captchaId, captchaUrl);
return captchaError;
}
====
public class ErrorCaptchaRequired extends Error {
........
}
【问题讨论】:
-
您应该考虑重命名这些类,
Errors 是可能导致 JVM 不稳定的严重问题,例如 OutOfMemoryError。这些应该是Exceptions,而不是Errors。除非有非常好的理由,否则开发人员不应该抓住Errors。 -
错误在他的帖子开头。
-
@Wrench 确实如此,我错过了
-
只是转换 agument: output.setError((Error)errorFactory.
getError(errorCode, error)); -
我认为您在这里不需要泛型。
getError应该只返回Error。您还应该注意@JonK 关于Error与Exception的建议。
标签: java oop generics inheritance