避免缓加载时因违反惯例导致的空引用!
来源:互联网 发布:在线订单系统 源码 编辑:程序博客网 时间:2024/06/11 05:04
文章来源 :IT工程技术网 http://www.systhinker.com/html/58/n-11658.html
有时候我们在获取对象的某个值时,我们想使用的时候在去加载,而不是一开始就伴随这对象的创建而创建。我们在类的内部使用lazy load的时候,一般是使用时去call一个方法让它真正的加载,但是方法用起来稍微有点别扭,毕竟xxxx().xxx有点难看,我们在.net里面一般都用属性来做这个工作了。
就如我下边的这个例子
代码
public class persion
{
private string _name;
private string _age;
private string Name
{
get
{
if (_name == null)
{
//lazy load _name value
}
}
}
private string Age
{
get{
if (_age == null) {
//lazy load _age value
}
}
}
public void PrintName()
{
//use _name is error
}
public void PrintAge()
{
//use _age is error
}
}
{
private string _name;
private string _age;
private string Name
{
get
{
if (_name == null)
{
//lazy load _name value
}
}
}
private string Age
{
get{
if (_age == null) {
//lazy load _age value
}
}
}
public void PrintName()
{
//use _name is error
}
public void PrintAge()
{
//use _age is error
}
}
我们假设向要缓加载的是Name和Age两个数据值(并且这两个数据我并不想对外公开),当然你可以认为那是从很遥远的火星拿下了的,速度并没有你想的那么快。我们真正用到的时候在去那。这个没有什么问题,也解决了我们缓加载的问题,但是如果你不小心用了一下_name或者_age那么.net在运行时就会告诉你空引用异常了。当然这个可以经过测试来检查这个问题。现在我们想要讨论的是如何避免这个问题。
自己闭上眼想一想如果是你你会如何避免这个问题。
我 的 答 案 如 下
下边是我经常使用的一种方案。
代码
public class persion
{
DataProvide _dataProvide = new DataProvide();
public void PrintName()
{
//call _dataProvide.Name
}
public void PrintAge()
{
//call _dataProvide.Age
}
private class DataProvide
{
private string _name;
private string _age;
public string Name
{
get
{
if (_name == null)
{
//lazy load _name value
}
}
}
public string Age
{
get{
if (_age == null) {
//lazy load _age value
}
}
}
}
}
{
DataProvide _dataProvide = new DataProvide();
public void PrintName()
{
//call _dataProvide.Name
}
public void PrintAge()
{
//call _dataProvide.Age
}
private class DataProvide
{
private string _name;
private string _age;
public string Name
{
get
{
if (_name == null)
{
//lazy load _name value
}
}
}
public string Age
{
get{
if (_age == null) {
//lazy load _age value
}
}
}
}
}
文章来源 :IT工程技术网 http://www.systhinker.com/html/58/n-11658.html
- 避免缓加载时因违反惯例导致的空引用!
- 避免动态分配内存后因异常而导致的内存泄露
- FragmentTabHost切换Fragment时避免重复加载UI,导致切换后重绘页面的问题解决
- 因外键约束导致数据不能清空的问题解决
- 解决因删除外键引用的时候导致相应字段被删除了的问题
- 如何避免因第三方供应商而导致数据泄漏
- 解决引用单个Library因android-support-v4.jar版本不同而导致的冲突
- spring解决JPA因EntityManager关闭导致的延迟加载例外有关问题
- Quartz因不同版本导致的异常
- 一个因中断导致的死锁分析
- 因编码格式问题导致的错误
- ECSHOP因PHP版本导致的错误
- 一个因中断导致的死锁分析
- 唉 好不严谨啊!!!对空指针的内容引用会导致异常
- WPF中ErrorTemplate导致的空引用at MS.Internal.Controls.TemplatedAdorner.MeasureOverride(Size constraint)
- 为什么前端优化时要避免空的src
- 尽量避免因图片(Bitamp)过大而导致内存溢出 工具类
- Android-三星手机利用ImageLoader加载系统图片的时候,提示空指针导致崩溃
- 【小阅读^大脑袋】0521 NO.366
- STL find函数
- Cisco ASA Web VPN 配置详解
- 底层的技术挺重要的。
- 一年的总结 ——序
- 避免缓加载时因违反惯例导致的空引用!
- STL for_each,find_if用法
- 3.11如何使视图居中?
- Java初学笔记(一)变量及其内存机制
- 关于Dr.com上网客户端常见问题合集
- servlet实现文件下载
- 软件中的易用性设计及测试(一)
- wxWidgets界面绘制一点总结
- 伟大的程序员是怎样炼成的?