我需要在我的应用程序中扩展Exception类,然后遇到了一种情况。
My Parent Exception类,带有一个httpCode setter / getter,用于将异常转换为http错误代码:
abstract class ParentException
{
private int httpCode;
protected ParentException()
{
this("");
}
public ParentException(String message)
{
super(message);
}
protected ParentException(Exception e)
{
super(e);
}
public int getHttpCode()
{
return httpCode;
}
public void setHttpCode(int httpCode)
{
this.httpCode = httpCode;
}
}
子类: 公共类AccessDeniedException扩展ParentException { public AccessDeniedException() { 此("&#34); }
public AccessDeniedException(String message)
{
super(message);
setHttpCode(HttpCodes.HTTP_CODE_403_FORBIDDEN_UNAUTHORIZED);
}
public AccessDeniedException(Exception e)
{
super(message);
setHttpCode(HttpCodes.HTTP_CODE_403_FORBIDDEN_UNAUTHORIZED);
}
}
类似地,我为各种相关的http代码提供了许多其他异常实现。我不喜欢的是setHttpCode()方法在两个地方。我想从一个构造函数中调用它。
我可以在所有类中只有一个构造函数如下(当然我需要同样修复父类):
public class AccessDeniedException extends ParentException
{
public AccessDeniedException()
{
this("");
}
public AccessDeniedException(String message)
{
this(message, null);
}
public AccessDeniedException(Exception e)
{
this("", e);
}
public AccessDeniedException(String message,Exception e)
{
super(message, e);
setHttpCode(HttpCodes.HTTP_CODE_403_FORBIDDEN_UNAUTHORIZED);
}
}
但我担心如果调用只有消息或异常的构造函数,则根Exception或Throwable类可能无法正确实例化。你觉得这种方法有什么问题吗?如果没有,那么更好的方法是什么。
答案 0 :(得分:2)
一种方法是在基类中使用:
protected abstract int getHttpCode();
然后每个儿童班都需要一个:
@Override
protected getHttpCode() {
return HttpCodes.HTTP_CODE_403_FORBIDDEN_UNAUTHORIZED;
}
答案 1 :(得分:1)
如果你这样做,第二种方式你应该传递import pandas as pd
import matplotlib.pyplot as plt
Monthly_Return2017 = Monthly_Return2017.reset_index()
Monthly_Return2016 = Monthly_Return2016.reset_index()
fig, ax = plt.subplots()
Monthly_Return2017['Close'].plot(ax=ax)
Monthly_Return2016['Close'].plot(ax=ax)
作为空和null
构造函数的消息。
第二种方法可行,但您可能会看到与第一种方法相比略有不同的输出,因为一些Exception
构造函数以不同的方式填充Throwable
。
此处所述的问题与detailMessage
的{{1}}扩展名相同。他们以与你的第一个例子相同的方式解决它。
在这两个中,我建议使用你的第一个例子,因为它遵循既定的约定,如果超类行为发生变化,则设计更健壮。
编辑 - M. Prokhorov指出应该有一个抽象的getter方法,这种方法可行并且是更好的设计。除此之外,我建议将httpCode包含在Parent的构造函数中。
e.g。
Exception
您还可以将代码提取到常量(静态最终)变量。