`

未初始化及其影响

 
阅读更多

如下代码中及其不合理的地方

public void execute(Environment env, Map params, TemplateModel[] loopVars,
   TemplateDirectiveBody body) throws TemplateException, IOException {
  
 
  Pagination page=new Pagination();
  CmsSite site = FrontUtils.getSite(env);

  String orgName=DirectiveUtils.getString(PARAM_ORG_NAME, params);
  int areaId=site.getAreaId().getId();
  

  List list=reportMng.getList(areaId);
  
  
   if(null!=page.getList()||null!=list)  //从这开始未对page 或list 初始化 导致编译为通过后条件大括号一直控制到结尾影从而影响代码的维护性,也导致后面无需用page list对象的条件也放进来
  {
   page = reportMng.queryOrg_InfoCount(site.getId(),site.getAreaId().getId(),orgName,1, 10);

    Map<String, TemplateModel> paramWrap = new HashMap<String, TemplateModel>(
    params);
  
  paramWrap.put(OUT_BEAN, DEFAULT_WRAPPER.wrap(site));
  paramWrap.put(OUT_PAGINATION, DEFAULT_WRAPPER.wrap(page));
  paramWrap.put(OUT_LIST,DEFAULT_WRAPPER.wrap(list));
  
  Map<String, TemplateModel> origMap = DirectiveUtils
    .addParamsToVariable(env, paramWrap);
  InvokeType type = DirectiveUtils.getInvokeType(params);
  String listStyle = DirectiveUtils.getString(PARAM_STYLE_LIST, params);
  if (InvokeType.sysDefined == type) {
   if (StringUtils.isBlank(listStyle)) {
    throw new ParamsRequiredException(PARAM_STYLE_LIST);
   }
   env.include(TPL_STYLE_LIST + listStyle + TPL_SUFFIX, UTF8, true);
  } else if (InvokeType.userDefined == type) {
   if (StringUtils.isBlank(listStyle)) {
    throw new ParamsRequiredException(PARAM_STYLE_LIST);
   }
   FrontUtils.includeTpl(TPL_STYLE_LIST, site, env);
  } else if (InvokeType.custom == type) {
   FrontUtils.includeTpl(TPL_NAME, site, params, env);
  } else if (InvokeType.body == type) {
   body.render(env.getOut());
  } else {
   throw new RuntimeException("invoke type not handled: " + type);
  }
  DirectiveUtils.removeParamsFromVariable(env, paramWrap, origMap);
 }
 }

 

现在贴上修改后代码:

public void execute(Environment env, Map params, TemplateModel[] loopVars,
   TemplateDirectiveBody body) throws TemplateException, IOException {
  //对page, list对象先初始化 使其对象有个地址指向
   List<Org_Info> list = new ArrayList();
  Pagination page=new Pagination();
  CmsSite site = FrontUtils.getSite(env);
  

  String orgName=DirectiveUtils.getString(PARAM_ORG_NAME, params);
  int areaId=site.getAreaId().getId();
    list=reportMng.getList(areaId);
  
  //初始化后虽然没值 但有地址指向 至使 对象不为null 能够编译通过
  page = reportMng.queryOrg_InfoCount(site.getId(),site.getAreaId().getId(),orgName,1, 10);
//  if(null!=page.getList()||null!=list)
//  {
//   
//  }
  Map<String, TemplateModel> paramWrap = new HashMap<String, TemplateModel>(
    params);
  
  paramWrap.put(OUT_BEAN, DEFAULT_WRAPPER.wrap(site));
  paramWrap.put(OUT_PAGINATION, DEFAULT_WRAPPER.wrap(page));
  paramWrap.put(OUT_LIST,DEFAULT_WRAPPER.wrap(list));
  
  Map<String, TemplateModel> origMap = DirectiveUtils
    .addParamsToVariable(env, paramWrap);
  InvokeType type = DirectiveUtils.getInvokeType(params);
  String listStyle = DirectiveUtils.getString(PARAM_STYLE_LIST, params);
  if (InvokeType.sysDefined == type) {
   if (StringUtils.isBlank(listStyle)) {
    throw new ParamsRequiredException(PARAM_STYLE_LIST);
   }
   env.include(TPL_STYLE_LIST + listStyle + TPL_SUFFIX, UTF8, true);
  } else if (InvokeType.userDefined == type) {
   if (StringUtils.isBlank(listStyle)) {
    throw new ParamsRequiredException(PARAM_STYLE_LIST);
   }
   FrontUtils.includeTpl(TPL_STYLE_LIST, site, env);
  } else if (InvokeType.custom == type) {
   FrontUtils.includeTpl(TPL_NAME, site, params, env);
  } else if (InvokeType.body == type) {
   body.render(env.getOut());
  } else {
   throw new RuntimeException("invoke type not handled: " + type);
  }
  DirectiveUtils.removeParamsFromVariable(env, paramWrap, origMap);
 
 }

 

可见对象未初始化对其后面的代码修改及逻辑影响有着决定性的影响,当涉及到代码整体修改时,先自问对其初始化否,进而再下结论。

分享到:
评论

相关推荐

    C++构造函数初始化列表

    1. **初始化列表方式**:通过在构造函数定义后跟上`:`符号,然后列出成员变量及其初始化值。这种方式直接初始化了成员变量,避免了不必要的复制操作。 2. **构造函数体内方式**:在构造函数的函数体中,通过赋值语句...

    PCI设备BAR空间的初始化

    本文将详细介绍PCI设备BAR空间的初始化过程及其重要性。 #### 二、PCI设备BAR空间初始化的重要性 1. **数据传输的基础**:在PCI设备能够通过PCI总线进行数据传输之前,必须正确初始化其BAR寄存器。这是因为BAR...

    LS-DYNA3D中的应力初始化_lsdyna_应力初始化_

    标题中的“应力初始化”是指在进行LS-DYNA3D模拟时,如何设定初始条件中的应力状态。在进行复杂的工程问题模拟时,正确设置初始应力对于获取准确的计算结果至关重要。 应力初始化通常涉及到以下几个关键知识点: 1...

    typedef struct 与 struct 的区别及初始化

    初始化结构体时,通常有两种方式:构造函数初始化(如果结构体是类)和成员初始化列表。由于 `struct` 在C++中等同于类,但不支持构造函数,所以我们必须使用成员初始化列表。例如,对于 `PhotoInfo` 结构体,其初始...

    串口初始化代码分析

    "串口初始化代码分析" 在本文中,我们将对 LPC2366 串口初始化代码进行分析,主要包括波特率计算、管脚配置、工作模式选择、中断寄存器配置等内容。 一、管脚配置 在串口初始化过程中,首先需要配置管脚。这里使用...

    WPF 对象初始化器_1 对象初始化器_1

    #### 三、对象初始化器的语法及示例 对象初始化器的基本语法是在创建对象后紧跟一对大括号`{}`,其中包含一系列的属性名和对应的初始值。 **示例**: ```csharp Person person = new Person { Name = "Tom", Age =...

    MFC中通用控件的初始化

    - `ICC_WIN95_CLASSES` 初始化所有Win95及以后版本的通用控件。 - `ICC_DATE_CLASSES` 初始化日期选择器、时间选择器等。 - `ICC_USEREX_CLASSES` 初始化组合框扩展控件。 - `ICC_COOL_CLASSES` 初始化酷栏(Rebar)...

    第二篇金蝶k3供应链系统初始化.pptx

    在本课程中,我们将学习如何对新帐套进行初始化设置,掌握供应链系统初始化流程及操作、系统参数的设置、基础资料的设置和初始数据录入等知识点。 一、初始化的概念 初始化是指完成手工与电脑系统的工作交接、...

    java代码的初始化顺序demo

    总之,Java代码的初始化顺序是类加载的必然过程,涉及到静态和实例初始化块、构造函数、成员变量初始化以及继承关系的影响。这个demo是学习和理解这些概念的重要工具,通过实际操作可以加深对Java内存管理和对象生命...

    FANUC机器人初始化系统的基本方法和步骤.docx

    本文将详细介绍FANUC机器人初始化系统的基本方法和步骤,包括必要的准备工作、具体操作流程及注意事项等内容。 #### 二、准备工作 在进行系统初始化之前,最重要的一步是做好系统的备份工作。备份可以确保在初始化...

    IRQ hierarchy的初始化及构建过程详解

    IRQ Hierarchy 的初始化及构建过程详解 IRQ(Interrupt Request)是计算机系统中的一种机制,允许外部设备请求 CPU 的注意,以便处理某些事件。IRQ hierarchy 是指系统中所有 IRQ 的组织结构,在系统启动过程中,...

    深思及各种加密狗初始化及写入工具。

    深思和微狗是两种常见的加密狗品牌,它们提供了不同的初始化和写入工具来管理与之相关的软件授权。 深思加密狗,全称DeepThink,是专业级的软件保护系统,通过物理设备与软件相结合的方式,为软件开发商提供了一种...

    hertzbeat部署使用到的sql初始化及初始yml

    1. **SQL初始化**:在部署`hertzbeat`时,SQL初始化通常指的是创建数据库、设置用户权限、导入预定义的数据结构(如表、视图、存储过程等)以及填充初始数据的过程。这一步确保了系统的数据层在启动时已经准备就绪,...

    数据开发-数据初始化方案

    数据开发-数据初始化方案是数据开发中一个重要的步骤,旨在确保订单中心项目顺利上线,把系统及各模块需要的基础信息提前按计划准备、完善。在数据初始化过程中,需要初始化的基础信息可以分为四大类:系统元数据、...

    VB 数组的初始化实例

    数组的初始化是指在声明数组时为它分配内存并赋予初始值的过程。在VB中,有多种方法可以初始化数组,本篇文章将深入探讨这些方法,并通过实例来说明。 ### 1. 静态初始化 静态初始化是在声明数组的同时为每个元素...

    ADS环境下ARM系统两种初始化方式分析

    ARM系统开发过程中,初始化过程的理解及其bootloader引导程序的实现是非常关键的一步。本文将基于ARM Developer Suite (ADS) 1.2和S3C4510B处理器,详细介绍ARM系统在ADS环境下的两种初始化方式。 #### 二、ADS1.2...

    疯狂内核之——内核初始化

    - **初始化头变量hdr**: hdr包含了一些重要的系统初始化参数。 - **准备实模式下C语言环境**: 实现C语言环境的基本设置,如栈和堆的初始化。 - **实模式代码main函数**: - **复制初始化头变量**: 将初始化信息...

    Vector初始化的各种写法

    不过,由于原始描述并未提供具体细节,以上的解释基于对Vector初始化的一般理解。对于深入的源码分析或特定工具的使用,需要查看原文档或博客内容获取更精确的信息。遗憾的是,提供的链接已无法访问,因此无法提供更...

Global site tag (gtag.js) - Google Analytics