我想 A 方法中抛出一个自定义异常类,想在异常类的构造方法中设置一个对象 T,在 B 方法中调用 A 方法 try/catch 住这个异常类,并且取出这个异常类中的对象 T, 应该如何做?

Java 异常信息中能不能设置对象

我想 A 方法中抛出一个自定义异常类,想在异常类的构造方法中设置一个对象 T,在 B 方法中调用 A 方法 try/catch 住这个异常类,并且取出这个异常类中的对象 T, 应该如何做?

  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    2272 引用 • 7713 回帖 • 920 关注
  • 异常
    16 引用 • 43 回帖
  • Q&A

    提问之前请先看《提问的智慧》精读注解版,好的问题比好的答案更有价值。

    1123 引用 • 7350 回帖 • 586 关注
被采纳的回答
  • 88250    

    哦,你这个 T 是指的泛型啊,我以为是 Object,用 Object 强转吧。

8 回帖   
请输入回帖内容...
  • 88250

    异常类加个 T 类型的属性,构造器传参设置,然后加个 getT 方法。好像很常规的操作,有什么问题么?

    1 回复
  • Ethan        

    泛型类是无法继承自 Throwable,倘若我们在 IDE 中写上类似 public class CustomException extends Throwable 的代码,那么 IDE 会提示我们 Genergic class may not extends ‘java.lang.Throwable’。

    1 回复
  • 88250      

    哦,你这个 T 是指的泛型啊,我以为是 Object,用 Object 强转吧。

    1 回复
  • Ethan        

    我现在目前用的就是 Object

    1 回复
  • 88250      

    我觉得异常中的信息最好还是固定类型,这样 catch 后处理起来不容易再次引发异常,否则 Object 强转这一步很有可能还会抛异常,引发意外。另外,异常相关信息最好是可序列化的并且不要太大。

    1 回复
  • Ethan        

    是的,现在主要是要在 Spring 中 A 方法调用 B 方法,A、B 方法不在一个类中,A 方法有事务(@Transactional(rollbackFor = Exception.class)),B 中使用 MySQL 默认自动提交(@Transactional(propagation = Propagation.NOT_SUPPORTED)),B 中调用方法 C,C 方法为新开事务(@Transactional(rollbackFor = Exception.class, propagation = Propagation.REQUIRES_NEW)),B 中捕获 C 中的异常封装成对象,以异常的形式抛出,在 A 中捕获 B 中的异常,将异常信息更新到数据库!这里在 A 方法里将 B 中的异常取出更新到数据库之前对同一张表进行了更新操作!想做到如果 B 中异常 A 直接回滚,但是异常信息一样保存!不知道这种实现方法可行吗?

    1 回复
  • 88250      

    我不确定是否能用注解的声明式事务实现,仅从你的描述来看,使用编程式事务管理可能会简单些。

    1 回复
  • Ethan        

    是的

请输入回帖内容 ...