gpt4 book ai didi

Java语言Exception实现最佳方案

转载 作者:行者123 更新时间:2023-11-29 04:20:34 25 4
gpt4 key购买 nike

我需要在我的应用程序中扩展 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;
}
}

子类: 公共(public)类 AccessDeniedException 扩展了 ParentException { 公共(public) AccessDeniedException() { 这(””);

    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);
}
}

但我担心如果调用仅包含消息或异常的构造函数,根异常或 Throwable 类可能无法正确实例化。您认为这种方法有什么问题吗?如果不是,执行此操作的更好方法是什么。

最佳答案

一种方法是在基类中:

protected abstract int getHttpCode();

然后每个子类都需要:

@Override
protected getHttpCode() {
return HttpCodes.HTTP_CODE_403_FORBIDDEN_UNAUTHORIZED;
}

关于Java语言Exception实现最佳方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49491321/

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