gpt4 book ai didi

java - 使用jdk 8处理异常

转载 作者:行者123 更新时间:2023-11-30 03:23:34 26 4
gpt4 key购买 nike

我正在使用 C# 中的委托(delegate)处理异常,例如:

public void QueryIpRanges(Action<ObservableCollection<LocationRange>, Exception> callback)
{
try
{
var ranges = from e in _xml.Descendants("computer")
select new LocationRange
{
Name = e.Attribute("prefix").Value,
Addresses = new ObservableCollection<IpRange>(
from i in e.Descendants("range")
select new IpRange
{
Start = i.Element("start").Value,
End = i.Element("end").Value,
Subnet = i.Element("subnet").Value,
Gateway = i.Element("gateway").Value
})
};

callback(new ObservableCollection<LocationRange>(ranges), null);
}
catch (FormatException ex)
{
callback(null, ex);
}
catch (ArgumentNullException ex)
{
callback(null, ex);
}

}

正如您在上面看到的,如果发生异常,我使用委托(delegate)来传递异常。
我的问题是,如何在 Java 8 中使用 lambda 来做到这一点。 Java 8 中处理异常最简洁的方法是什么。

最佳答案

做这样的事情:

public class Program {
public static void main(String[] args) {
final int[] myInt = new int[1];
tryParseInt("123", (rs, ex) -> {
if (ex == null) {
myInt[0] = rs;
} else {
ex.printStackTrace();
System.exit(1);
}
});
System.out.println("myInt = " + myInt[0]);
}

static void tryParseInt(String text, Callback<Integer, NumberFormatException> callback) {
try {
callback.publish(Integer.parseInt(text), null);
} catch (NumberFormatException ex) {
callback.publish(null, ex);
}
}
}

@FunctionalInterface
interface Callback<T, E extends Exception> {
void publish(T result, E ex);
}

关于java - 使用jdk 8处理异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30775055/

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