Java 具有消息格式参数的可丢弃构造函数

Java 具有消息格式参数的可丢弃构造函数,java,exception,Java,Exception,是否有任何理由认为Trowable类没有带参数的构造函数来格式化消息字符串 我相信这样的构造函数将允许更干净和优雅的异常处理 throw new Exception(String.format("Illegal value. Must be between %s and %s", min, max)); IMHO会像这样看起来更好: throw new Exception("Illegal value. Must be between {} and {}", min, max); 在中型/大

是否有任何理由认为Trowable类没有带参数的构造函数来格式化消息字符串

我相信这样的构造函数将允许更干净和优雅的异常处理

throw new Exception(String.format("Illegal value. Must be between %s and %s", min, max));
IMHO会像这样看起来更好:

throw new Exception("Illegal value. Must be between {} and {}", min, max);
在中型/大型应用程序中,这可以节省大量键入并提高可读性


我想知道为什么Sun/Oracle还没有做出这样的改变。如何打开Oracle的“票证”来分析我的建议?

我同意,对于异常类型,可能会有更好的构造函数

但是,自己编写帮助器方法很容易

public static String outOfBoundsMessage(int min, int max, int actualValuePassed) {
    return String.format("Illegal value. %s is not between %s and %s", actualValuePassed, min, max);
}
那你就可以了

throw new Exception(outOfBoundsMessage(0, 10, 15));

我同意本可以有一些更好的异常类型构造函数

但是,自己编写帮助器方法很容易

public static String outOfBoundsMessage(int min, int max, int actualValuePassed) {
    return String.format("Illegal value. %s is not between %s and %s", actualValuePassed, min, max);
}
那你就可以了

throw new Exception(outOfBoundsMessage(0, 10, 15));

“我想知道为什么Sun/Oracle还没有做这个更改。”-我想只有Sun/Oracle可能知道……可能是因为还有其他包装器类。应该有一些一致性,特别是当String.format(..)方法已经存在以实现这一点时。可能是因为格式化异常与抛出异常是一个单独的问题,需要在不同的位置实现。您不希望抛出异常的代码必须关心本地化。看看Spring是如何使用MessageSource的。“我想知道为什么Sun/Oracle还没有做这个更改。”-我想只有Sun/Oracle可能知道……可能是因为还有其他包装器类。应该有一些一致性,特别是当String.format(..)方法已经存在以实现这一点时。可能是因为格式化异常与抛出异常是一个单独的问题,需要在不同的位置实现。您不希望抛出异常的代码必须关心本地化。看看Spring是如何使用MessageSource的。这是我目前使用的方法,但可能更好,因为我们有数百个异常,而且(几乎)所有异常都是用参数格式化的。@andrucz不幸的是,没有银弹。可以说,
Throwable
可以被赋予一个构造函数
Throwable(字符串格式,对象…args)
,该构造函数调用
this(String.format(格式,args))。这是我目前的工作方法,但可能更好,因为我们有数百个异常,而且(几乎)所有异常都是用参数格式化的。@andrucz不幸的是,没有银弹。可以说,
Throwable
可以被赋予一个构造函数
Throwable(字符串格式,对象…args)
,该构造函数调用
this(String.format(格式,args))