格式化自定义错误消息的基本问题

问题描述

我需要一些帮助来理解这个场景的最佳实践。

我创建了一个自定义异常类,它有 3 个子类。我正在覆盖消息以满足我的需要。 现在子类也需要有自定义消息。我可以以某种方式找到一种方法来利用父类但使用不同的格式吗?

父异常类

export const postCsv = sensorData => (dispatch,getState) => {

  const token = getState().auth.token;

  // Headers
  const config = {
    headers: {
      'Content-Type': "application/json"
    }
  }

  // If token exists,add to headers config
  if (token) {
    config.headers['Authorization'] = `Token ${token}`
  }

  // Post request to API
  axios.post(`${baseURL}/sensors_data/csv`,sensorData,config)
  .then(res => {
    console.log(res);
    if (res.status === 200) {
      dispatch({
        type: POST_CSV,payload: res.data
      })
    }
  })
  .catch(err => {
    console.log(err.response);
  })
} 

子异常类示例

public class customException extends RuntimeException {

String myFormat = " Custom Exception message here,%s,%s";

private String A;

public customException(String A,String message){
this.A= A;
super(message);
}

@Override
public String getMessage() {
return String.Format(myFormat,A,super.getMessage());
}

编辑:

我目前的解决方法是这样的。

子异常类示例

public class childException extends customException {

String myFormat = " ChildException message here,%s";

public customException(String A,String message){
super(A,message);
}

@Override
public String getMessage() {
return super.getMessage();    // find a way to format using the ChildClass myFormat? 
    }

为了避免上面的 super.getMessage(),为了打印父异常的格式,我正在检查超类中的 getMessage() 方法,看看该类是否是子类的实例。不是一个合适的解决方案。

public class childException extends customException {

String myFormat = " ChildException message here,String message){
super(message);  // have another constructor in the Parent exception class
this.A=A;
} 

@Override
public String getMessage() {
return String.Format(myFormat,super.getMessage()); 
    }

解决方法

为什么不更改 childException 类中的 return super.getMessage() 行。

代替:

@Override
public String getMessage() {
    return   super.getMessage();    // find a way to format using the ChildClass myFormat? 
}

试试:

@Override
public String getMessage() {
  this.myFormat = this.myFormat.append("hello");
  return this.myFormat; // find a way to format using the ChildClass myFormat? 
}

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...