代码规范 自定义 Exception

代码规范 自定义 Exception

很多规范中都提到,自定义Exception 要求使用一种统一的构造函数,比如默认实现以下四个构造函数。

None.gif
    [Serializable ]
None.gif    

public
 
class
 XXXException:ApplicationException
ExpandedBlockStart.gifContractedBlock.gif    

dot.gif
{
InBlock.gif        
public XXXException():base()
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public XXXException(string message):base(message)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
public XXXException(string message,Exception innerException):base(message,innerException)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif
ExpandedSubBlockEnd.gif        }

InBlock.gif
InBlock.gif        
protected XXXException ( System.Runtime.Serialization.SerializationInfo info , System.Runtime.Serialization.StreamingContext context ):base(info,context)
ExpandedSubBlockStart.gifContractedSubBlock.gif        
dot.gif{
InBlock.gif            
ExpandedSubBlockEnd.gif        }

InBlock.gif
ExpandedBlockEnd.gif    }

这样做有几个好处
1. 前三个构造函数可以提供一直的实现方式
2. 最后一个构造函数是对象使用 soap 或者binary formattor 反序列化的时候比不可少的构造函数。否则你的remoting 对象服务端抛出的异常,无法bubble 到客户端。

我写一个简单的soap formattor 的例子来模拟remoting 对象的传递

None.gif
    
//
TODO 1 soap 序列化

None.gif

            XXXException ex
=
new
 XXXException(
“
invaliddot.gif.
“
);
None.gif            
None.gif
None.gif            FileStream fs

=
new
 FileStream(
“
soap.xml
“
,FileMode.Create );
None.gif
None.gif            
None.gif            System.Runtime.Serialization.Formatters.Soap.SoapFormatter sr

=
new
 System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
None.gif             
None.gif            sr.Serialize(fs,ex);
None.gif            fs.Flush();
None.gif            fs.Close();
None.gif
None.gif            

//
TODO 2 soap 翻序列化

None.gif

            XXXException exp;
None.gif
None.gif            FileStream fs1

=
new
 FileStream(
“
soap.xml
“
,FileMode.Open);
None.gif            
None.gif            System.Runtime.Serialization.Formatters.Soap.SoapFormatter dsr

=
new
 System.Runtime.Serialization.Formatters.Soap.SoapFormatter();
None.gif             
None.gif            exp

=
(XXXException)dsr.Deserialize(fs1);
None.gif            
None.gif            fs1.Close();
None.gif            MessageBox.Show(exp.Message);

如果没有xxxexception 的第四个构造函数,可能会有

An unhandled exception of type ‘System.Runtime.Serialization.SerializationException’ occurred in mscorlib.dll

Additional information: The constructor to deserialize an object of type ExceptionDemo.XXXException was not found.

当然这个是针对 remoting,web service 走得是 xml serilizer,目前这个版本对 属性中有申明权限要求的字段无法序列化。所以web service 中,你是无法直接讲 exception 传递给客户端。

比如一下例子

  [WebMethod]
  public string HelloWorld(string s,out Exception ex)
  {
   ex=new FormatException(“fasdf”);
   return “Hello World”;
  }

你会发现这个例子无法在客户端调用,呵呵。

转载于:https://www.cnblogs.com/montaque/archive/2004/12/06/73358.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/111171.html原文链接:https://javaforall.net

赞 (0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • android开发揭秘!全靠这份Android知识点PDF大全,附答案[通俗易懂]

    android开发揭秘!全靠这份Android知识点PDF大全,附答案[通俗易懂]Glide缓存简介Glide的缓存设计可以说是非常先进的,考虑的场景也很周全。在缓存这一功能上,Glide又将它分成了两个模块,一个是内存缓存,一个是硬盘缓存。这两个缓存模块的作用各不相同,内存缓存的主要作用是防止应用重复将图片数据读取到内存当中,而硬盘缓存的主要作用是防止应用重复从网络或其他地方重复下载和读取数据。内存缓存和硬盘缓存的相互结合才构成了Glide极佳的图片缓存效果,那么接下来我们就分别来分析一下这两种缓存的使用方法以及它们的实现原理。我认识很多优秀的Android工程师,他们丝毫

    2022年5月3日
  • 批处理框架spring batch基础知识介绍「建议收藏」

    批处理框架spring batch基础知识介绍「建议收藏」TableofContentsspringbatch简介SpringBatch架构介绍SpringBatch核心概念介绍什么是Job什么是JobInstance什么是JobParameters什么是JobExecution什么是Step什么是StepExecution什么是ExecutionContext什么是JobRepository…

    2022年5月28日
  • document.documentElement.clientHeight「建议收藏」

    document.documentElement.clientHeight「建议收藏」于获取各种浏览器可见窗口大小的一点点研究functiongetInfo(){vars=””;s=”网页可见区域宽:”document.body.clientWidth;s=”网页可见区域高:”document.body.clientHeight;s=”网页可见区域宽:”document.body.offsetWidth”(包括边线和滚

    2022年9月10日
  • 学习方法——哈佛大学幸福课(积极心理学)学习笔记(下)[通俗易懂]

    学习方法——哈佛大学幸福课(积极心理学)学习笔记(下)[通俗易懂]最近刚看完哈佛大学的幸福课(又名积极心理学),真的是受益匪浅,通常心理学只研究如何消除抑郁、自卑等消极心理,但是消除了消极心理并不代表就会变得幸福,就像摆脱了痛苦并不代表获得了快乐。积极心理学的核心内容就是去分析积极心理的特点、研究如何培养他们。下面目录中加粗的章节是我认为的讲的最好的章节,从根源去分析悲观、焦虑以及完美主义等是如何产生的,然后分析它们与积极品性的关系,最后告诉我们培养积极品性…

    2022年7月25日
  • 12款Py程序员必备PyCharm插件,亲测过~推荐

    12款Py程序员必备PyCharm插件,亲测过~推荐最近使用Python,烧脑的我,使用编程软件肯定少不了去安装一些非常好用的插件,目的为了代码高效和方便的开发。以下是我亲测过的一些插件,很实用!!!!下载位置在输入框种输入要安装的插件名称即可下载。插件合集1..ignore我们做的每个Git项目中都需要一个“.gitignore”文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。2.CSVPlugin(必备推荐)它可以让CSV各个列之间区别明显,很清晰的显示各种颜色的高亮.3.CodeGlan..

    2022年6月24日
  • python hashlib安装_Hashlib加密,内置函数,安装操作数据库「建议收藏」

    python hashlib安装_Hashlib加密,内置函数,安装操作数据库「建议收藏」hashlib模块的md5加密:md5同样的内容加密后是一样的md5加密后是不可逆的。即能加密,没办法解密。撞库:只是针对简单的,因为同样的内容加密后是一样的,难一点就不行了。登录密码:注册时候加密了保存,在登录时再加密,对比加密后内容一致即符合条件登录加盐:目的是增加复杂性。在该加密的内容上,再加上定好的一段儿内容,一同加密。在加上的这段内容,就是1importhashlib2#impor…

    2022年5月31日

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号