gpt4 book ai didi

java - 如何在 Java 中打印导致异常的参数值?

转载 作者:搜寻专家 更新时间:2023-11-01 01:15:01 24 4
gpt4 key购买 nike

我正在为 csv 文件编写解析器,有时会出现 NumberFormatException。有没有简单的方法来打印导致异常的参数值?

目前我有许多 try-catch block ,看起来像这样:

String ean;
String price;

try {
builder.ean(Long.parseLong(ean));
} catch (NumberFormatException e) {
System.out.println("EAN: " + ean);
e.printStackTrace();
}

try {
builder.price(new BigDecimal(price));
} catch (NumberFormatException e) {
System.out.println("Price: " + price);
e.printStackTrace();
}

我希望能够写出这样的东西:

try {
builder.ean(Long.parseLong(ean));
} catch (NumberFormatException e) {
e.printMethod(); // Long.parseLong()
e.printArgument(); // should print the string ean "99013241.23"
e.printStackTrace();
}

有什么方法至少可以改进我的代码吗?并且以编程方式进行这种打印/日志记录?

更新:我尝试实现 Joachim Sauer 回答的内容,但我不知道我是否做对了一切,或者我是否可以改进它。请给我一些反馈。这是我的代码:

public class TrackException extends NumberFormatException {
private final String arg;
private final String method;

public TrackException (String arg, String method) {
this.arg = arg;
this.method = method;
}

public void printArg() {
System.err.println("Argument: " + arg);
}

public void printMethod() {
System.err.println("Method: " + method);
}
}

包装类:

import java.math.BigDecimal;
public class TrackEx {
public static Long parseLong(String arg) throws TrackException {
try {
return Long.parseLong(arg);
} catch (NumberFormatException e) {
throw new TrackException(arg, "Long.parseLong");
}
}

public static BigDecimal createBigDecimal(String arg) throws TrackException {
try {
return new BigDecimal(arg);
} catch (NumberFormatException e) {
throw new TrackException(arg, "BigDecimal.<init>");
}
}
}

使用示例:

try {
builder.ean(TrackEx.createBigDecimal(ean));
builder.price(TrackEx.createBigDecimal(price));
} catch (TrackException e) {
e.printArg();
e.printMethod();
}

编辑: 同样的问题,但针对 .NET:In a .net Exception how to get a stacktrace with argument values

最佳答案

您可以轻松地在自定义编写的异常上实现此类详细信息,但大多数现有异常只提供详细消息和导致异常。

例如,您可以将所有数字解析需求包装到一个实用程序类中,该实用程序类捕获 NumberFormatException 并抛出自定义异常(可能扩展 NumberFormatException)。

通过异常携带一些附加信息的例子是SQLException其中有 一个 getErrorCode() 和一个 getSQLState() 方法。

关于java - 如何在 Java 中打印导致异常的参数值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2448037/

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