我有一个有很多功能的类
public class Test {
public void a() {
try {
doSomething1();
} catch (AException e) {
throw new BException(e.getMessage(), e.getCause());
}
}
public void b() {
try {
doSomething2();
} catch (AException e) {
throw new BException(e.getMessage(), e.getCause());
}
}
}在每个方法中,捕获特定类型的异常并将其转换为另一个异常并引发。
我想消除重复。
发布于 2018-09-22 08:12:05
您可以使用lambda删除复制:
CallableEx将接受任何异常。如果AException是一个未经检查的异常,您将不需要它。Callable接口不会对您有多大帮助,因为它抛出了一个Exception,而不是您的AException:例如,您必须检查等等。this::doSomething1,但我建议您不要这样做:这使代码更加清晰,并且分离了关注点。您可能还可以使用注释处理器来完成相同的工作,并重写方法,以便将AException包装为BException。Java代码中不会有复制,但是字节码肯定会复制。
在这里,使用lambda的示例:
public class Test {
@FunctionalInterface
interface CallableEx<T, E extends Exception> {
T run() throws E;
}
private <T> void handleException(CallableEx<T, AException> forrestGump) {
try {
return forrestGump.run();
} catch (AException e) {
throw new BException(e.getMessage(), e.getCause());
}
}
public String a() {
return handleException(this::doSomething1);
}
public int b(int a, int b) {
return handleException(() -> this.doSomething2(a, b));
}
public <T extends Foobar> void c(T my) {
handleException(() -> this.doSomething3(my));
}
private String doSomething1() {return "A";}
private int doSomething2(int a, int b) {return a + b;}
private <T extends Foobar> void doSomething3(T my) {my.foo();}
}https://stackoverflow.com/questions/52454687
复制相似问题