当前位置: 首页 > 科技观察

如何优雅的实现try-catch异常块?

时间:2023-03-20 19:12:57 科技观察

在项目中,我们会遇到异常处理。对于运行时异常,需要我们自己判断处理。对于checkedexception,我们需要主动去处理。但是代码中嵌套了繁琐的try{}caht,看着很不舒服。我们不会在这里讨论性能。就代码而言,让我们看看如何隐藏它。原理保持不变。变成怎么写。让我们看看如何优雅地处理异常块。在这之前。你需要知道以下几个概念:行为参数化:是java8提出的一种函数式编程思想。通过将代码打包为参数传递行为,即将代码逻辑打包为参数传递给方法。Lambda表达式:Java8提出:Lambda表达式理解为一种简洁的表达匿名函数的方式,可以传递。它没有名字,但有函数体、参数列表和返回类型。可以抛出异常类型。将代码逻辑包装为参数意味着使用Lambda表达式。函数式接口:本质上是一个只有一个抽象方法的通用接口,可以隐式转换为Lambda表达式,需要用注解(@FunctionalInterface)定义。默认方法和静态方法可能不属于抽象方法,可以定义在函数式接口中。如果在函数式接口中额外定义了多个抽象方法,这些抽象方法的签名必须与Object的公共方法签名相同。接口最终有一个确定的类实现,类的最终父类是Object。因此,功能接口可以定义Object的公共方法。这段代码大家并不陌生。这是一个已检查的异常,需要抛出ClassNotFoundException。正常的写法:好了,我们来看具体的实现:很简单,我们要做的就是对待Classclazz=Class.forName("classname");作为一个行为,接受一个String,获取一个Class,所以我们需要定义一个函数式接口来描述这个行为。这里,因为我们的行为需要抛出异常。所以接口也会抛出异常。然后,我们需要定义一个方法,将我们的行为作为参数传入,同时捕获我们的异常。当然,我们随后可以调用我们的方法classFind方法。其实这种思路并不简单,可以通过捕获异常来处理。让我们看一个Demo->converttextfilestostrings:Inmyopinion;将文本文件转成字符串,需要用高层流包裹低层流,然后做缓存读出。在这里,我们难免会遇到异常处理、流关闭等操作。下面我们将这些代码做成异常。只关注写和读的逻辑。我的想法:我对javaIO不是很熟悉。如果大家有好的方法欢迎留言,互相学习:bytestream-》characterstream-》charactercachestream将字节流转为字符流,并用高级流包裹起来。所以我的想法是在逻辑上避免过多的IO流闭包和异常捕获,只专注于处理读取逻辑,结合以下两种技术:try(){}【自动关闭流,1.7支持】lambdafeatureToimplement[behaviorparameterization,1.8]执行一个行为,任何BufferReader->String的Lambda表达式都可以作为参数传入。只要符合peocess方法的签名即可。实施