使用 SWF TryCatch 中 doCatch() 方法中 doTry() 方法中定义的变量
Use a variable defined in doTry() method from doCatch() method in SWF TryCatch
我有一个 SWF TryCatch class 结构,如:
new TryCatch() {
@Override
protected void doTry() throws Throwable {
Promise<Boolean> ifHostsWereReserved = client.reserveHostsForOnboarding());
Promise<Boolean> ifHostsReleaseCompleted = client.releaseExtraHostsAfterOnboarding();
}
@Override
protected void doCatch(Throwable e) throws Throwable {
updateAvailableHosts(ifHostsWereReserved,
ifHostsReleaseCompleted);
}
}
我无法访问 doCatch() 块中的变量,因为这些变量是 doTry() 方法的本地变量。此外,如果我在 doTry() 方法之前声明它们并在 doTry() 方法中更新它们的值,它们不再等同于 final 并且我收到编译错误。
Whats 是处理此问题的首选方法。
您可以这样声明变量:
new TryCatch() {
Promise<Boolean> ifHostsWereReserved;
Promise<Boolean> ifHostsReleaseCompleted;
@Override
protected void doTry() throws Throwable {
ifHostsWereReserved = client.reserveHostsForOnboarding());
ifHostsReleaseCompleted = client.releaseExtraHostsAfterOnboarding();
}
@Override
protected void doCatch(Throwable e) throws Throwable {
updateAvailableHosts(ifHostsWereReserved,
ifHostsReleaseCompleted);
}
}
eazimmerman 的评论是正确的。如果需要引用TryCatch之外的变量,Settable可以这样使用:
final Settable<Boolean> ifHostsWereReserved = new Settable<>();
final Settable<Boolean> ifHostsReleaseCompleted = new Settable<>();
new TryCatch() {
@Override
protected void doTry() throws Throwable {
ifHostsWereReserved.chain(client.reserveHostsForOnboarding()));
ifHostsReleaseCompleted.chain(client.releaseExtraHostsAfterOnboarding());
}
@Override
protected void doCatch(Throwable e) throws Throwable {
updateAvailableHosts(ifHostsWereReserved,
ifHostsReleaseCompleted);
}
};
useTheseVariables(ifHostsWereReserved, ifHostsReleaseCompleted);
我有一个 SWF TryCatch class 结构,如:
new TryCatch() {
@Override
protected void doTry() throws Throwable {
Promise<Boolean> ifHostsWereReserved = client.reserveHostsForOnboarding());
Promise<Boolean> ifHostsReleaseCompleted = client.releaseExtraHostsAfterOnboarding();
}
@Override
protected void doCatch(Throwable e) throws Throwable {
updateAvailableHosts(ifHostsWereReserved,
ifHostsReleaseCompleted);
}
}
我无法访问 doCatch() 块中的变量,因为这些变量是 doTry() 方法的本地变量。此外,如果我在 doTry() 方法之前声明它们并在 doTry() 方法中更新它们的值,它们不再等同于 final 并且我收到编译错误。
Whats 是处理此问题的首选方法。
您可以这样声明变量:
new TryCatch() {
Promise<Boolean> ifHostsWereReserved;
Promise<Boolean> ifHostsReleaseCompleted;
@Override
protected void doTry() throws Throwable {
ifHostsWereReserved = client.reserveHostsForOnboarding());
ifHostsReleaseCompleted = client.releaseExtraHostsAfterOnboarding();
}
@Override
protected void doCatch(Throwable e) throws Throwable {
updateAvailableHosts(ifHostsWereReserved,
ifHostsReleaseCompleted);
}
}
eazimmerman 的评论是正确的。如果需要引用TryCatch之外的变量,Settable可以这样使用:
final Settable<Boolean> ifHostsWereReserved = new Settable<>();
final Settable<Boolean> ifHostsReleaseCompleted = new Settable<>();
new TryCatch() {
@Override
protected void doTry() throws Throwable {
ifHostsWereReserved.chain(client.reserveHostsForOnboarding()));
ifHostsReleaseCompleted.chain(client.releaseExtraHostsAfterOnboarding());
}
@Override
protected void doCatch(Throwable e) throws Throwable {
updateAvailableHosts(ifHostsWereReserved,
ifHostsReleaseCompleted);
}
};
useTheseVariables(ifHostsWereReserved, ifHostsReleaseCompleted);