Be specific in throws clause

本文深入探讨了在方法抛出异常时,应如何避免将相关异常泛化到一个通用异常类的问题。通过实例展示了不当的异常处理方式,并提供了正确的异常翻译实践,以确保丢失的重要信息不会被忽略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

http://www.javapractices.com/topic/TopicAction.do?Id=27


In the throws clause of a method header, be as specific as possible. Do not group together related exceptions in a generic exception class - that would represent a loss of possibly important information.

An alternative is the exception translation practice, in which a low level exception is first translated into a higher level exception before being thrown out of the method.

Example

Here, both IOException and FileNotFoundException are incorrectly lumped together as Exception

import java.io.*;
import java.util.*;

public final class BadGenericThrow {
  
  //..elided

  /**
  * BAD: This method throws a generic Exception, instead
  * of FileNotFoundException and IOException.
  */
  public void makeFile() throws Exception {
    //create a Serializable List
    List<String> quarks = new ArrayList<>();
    quarks.add("up");
    quarks.add("down");
    quarks.add("strange");
    quarks.add("charm");
    quarks.add("top");
    quarks.add("bottom");

    //serialize the List
    try (
      ObjectOutputStream output  = new ObjectOutputStream(
        new FileOutputStream("quarks.ser")
      )
    ){
      output.writeObject(quarks);
    }
  }
} 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值