java - 使用jdk 8处理异常

标签 java c#

我正在使用 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/

相关文章:

java - 我将如何使用 while 循环来获取多个输入?

c# - Blazor [WASM] System.TypeLoadException : Could not resolve type with token 0100001a

C# 银行示例 - 客户类 - 取款、存款等

java - 尝试从 Java 哈希表中获取对象

java - netbeans 输出线重叠

java - 如何使字符串在其他类中可用

java - @PostConstruct 在 JBoss 7 上使用 @Singleton 和 @Startup 在类里面执行了两次

c# - 如何在运行时创建的控件上添加事件

c# - INotifyPropertyChanged - 数据访问、业务或 UI 层

c# - 从程序资源中检索图像