Java 投掷类<;?扩展可丢弃性>;
我有一个函数,看起来像这样:Java 投掷类<;?扩展可丢弃性>;,java,throwable,Java,Throwable,我有一个函数,看起来像这样: public void addExceptionCommands(Class当您有一个类类型时,您可以执行以下操作 throw exClass.newInstance(); 当您有一个类类型时,您可以执行以下操作 throw exClass.newInstance(); 您只能抛出Throwable和Classisnt的子类 但是,您可以修改您的方法以接受供应商,该供应商生成一个新的可丢弃项,然后您可以抛出: public void addExceptio
public void addExceptionCommands(Class当您有一个类类型时,您可以执行以下操作
throw exClass.newInstance();
当您有一个类类型时,您可以执行以下操作
throw exClass.newInstance();
您只能抛出Throwable
和Class
isnt的子类
但是,您可以修改您的方法以接受供应商,该供应商生成一个新的可丢弃项,然后您可以抛出:
public void addException命令(供应商例外供应商,命令…命令)抛出{
用于(命令:命令){
试一试{
//将命令推送到已执行命令的堆栈中
push(命令);
command.execute();
}捕获(不能执行命令和异常e){
//默认策略是回滚
回滚();
//日志
e、 printStackTrace();
//我想在这里扔一块石头
final T exception=exceptionSupplier.get();
例外情况(e);
抛出异常;
}
}
}
然后,您可以这样调用您的方法:
addExceptionCommands(YourException::new、command1、command2等);
您只能抛出Throwable
和Class
isnt的子类
但是,您可以修改您的方法以接受供应商,该供应商生成一个新的可丢弃项,然后您可以抛出:
public void addException命令(供应商例外供应商,命令…命令)抛出{
用于(命令:命令){
试一试{
//将命令推送到已执行命令的堆栈中
push(命令);
command.execute();
}捕获(不能执行命令和异常e){
//默认策略是回滚
回滚();
//日志
e、 printStackTrace();
//我想在这里扔一块石头
final T exception=exceptionSupplier.get();
例外情况(e);
抛出异常;
}
}
}
然后,您可以这样调用您的方法:
addExceptionCommands(YourException::new、command1、command2等);
该参数是异常的一种类型。如果抛出某个对象,它必须是异常的实例
我认为这不会像你想的那样奏效
如果您希望调用方定义抛出的异常类型,那么让调用方在其自己的代码中这样做。调用方可以捕获您的方法抛出的异常,并将其包装在它选择的任何异常中
public void addExceptionCommands( Command... commands)
throws CouldNotExecuteCommandException {
...
}
...
try {
commandable.addExceptionCommands( myCommands );
} catch (CouldNotExecuteCommandException e) {
// Wrap the command exception in my own.
throw new MySpecialException( "My message", e );
}
如果您想从命令中支持各种异常,考虑java的java. UTIL并发包提供的示例。考虑<代码> ExtutoService。子()/<代码>方法和方法。提交给执行程序的任务可以抛出大量的异常。但是<代码>
将抛出的任何异常包装在一个单独的、定义良好且声明的ExecutableException
中。该参数是异常的一种类型。如果抛出某个异常,它必须是异常的实例
我认为这不会像你想的那样奏效
如果您希望调用方定义抛出的异常类型,那么让调用方在其自己的代码中这样做。调用方可以捕获您的方法抛出的异常,并将其包装在它选择的任何异常中
public void addExceptionCommands( Command... commands)
throws CouldNotExecuteCommandException {
...
}
...
try {
commandable.addExceptionCommands( myCommands );
} catch (CouldNotExecuteCommandException e) {
// Wrap the command exception in my own.
throw new MySpecialException( "My message", e );
}
如果您想从命令中支持各种异常,考虑java的java. UTIL并发包提供的示例。考虑<代码> ExtutoService。子()/<代码>方法和方法。提交给执行程序的任务可以抛出大量的异常。但是<代码>将抛出的任何异常包装在一个单独的、定义良好且声明的
ExecutableException
尝试使用java.lang.reflect.Constructor
Constructor.newInstance()
优于Class.newInstance()
,因为它允许您使用参数创建新实例
Constructor constructor = exClass.getDeclaredConstructor();
Throwable ex = (Throwable) constructor.newInstance();
throw ex;
带有字符串参数(用于消息?)
另外,Class.newInstance()
已被弃用。
尝试使用java.lang.reflect.Constructor
Constructor.newInstance()
优于Class.newInstance()
,因为它允许您使用参数创建新实例
Constructor constructor = exClass.getDeclaredConstructor();
Throwable ex = (Throwable) constructor.newInstance();
throw ex;
带有字符串参数(用于消息?)
另外,Class.newInstance()
已被弃用。
您只传递一个类对象,它主要用于反射。您可能应该传递一个Throwable
,这样它实际上可以被thrown该参数是一种异常类型。您必须抛出一个异常实例。如何抛出Exportss.newInstance()
?我明白了,谢谢大家:我们只传递一个类对象,它主要用于反射。您可能应该传递一个Throwable
,这样它实际上可以被thrown。参数是一种异常类型。您必须抛出一个异常的实例。如何抛出惊叹号。newInstance()
?我明白了,谢谢大家:Ddeprecated。传入供应商弃用会更安全。传入供应商会更安全。在这里,我们与其说是抑制原始异常,不如说是以另一种形式传递它。调用异常。initCause(e)
而不是addsupprested()
。在这里,我们与其说是抑制原始异常,不如说是以另一种形式传递它。调用exception.initCause(e)
比调用addsuppress更有意义