`

Java用户回调方法消除冗余代码

 
阅读更多

http://hi.baidu.com/luodaijun/blog/item/ce1cccef6acb173eadafd518.html

 

一. 看一段冗余的代码

public String login(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
Connection conn=null;
try{
     
Conection conn =DBManager.getConnection();
    
   if(webContext.getOperatorName.equals("123")){
          // 登陆成功
      }

}catch(Throwable t){
   //记录日志
//跳转到统一的错误页面,不能让用户看到异常页面
       //关闭Connection
       if(conn!=null){
           try{conn.close();}cath(SQLException ex){}
     }
   }

}

public String logOut(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
try{
      
Conection conn =DBManager.getConnection();
        operatorService.logout();
     
request.getSession().invalidate();
}catch(Throwable t){
   //记录日志
//跳转到统一的错误页面,不能让用户看到异常页面
       //关闭Connection
       if(conn!=null){
           try{conn.close();}cath(SQLException ex){}
     }

   }
}



二、可以看到,红色部分代码完全是冗余的,下面用回调方法简化这部分代码


1.先定义一个回调抽象类
public abstract class AppCallback {

    /**
    * 回调执行方法
    *
    * @return
    */
    public String execute() {
      Connection conn=null;
       try{
           conn= DBManager.getConnection();
       this.doLogic(conn);
       catch(Throwable t){
          //记录日志
   //跳转到统一的错误页面,不能让用户看到异常页面
         //关闭Connection
     if(conn!=null){
         try{conn.close();}cath(SQLException ex){}
         }

      }
    }

    /**
    * 业务代码,由子类实现
    *
    * @param xmlResponse
    * @param webContext
    */
    public abstract void doLogic(Connection conn);

}



三、用回调类简化代码

public String login(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
     new AppCallback(){
          public void doLogic(Connection conn){
                // conn.executeQuery()
          }
    }.execute();
}

public String logOut(HttpServletRequest request){
   OperatorService operatorService = new OperatorService();
   WebContext webContext= request.getSession().getAttribute("WEB_CONTEXT_KEY");
new AppCallback(){
          public void doLogic(Connection conn){
                 // conn.executeQuery()
          }
    }.execute();
}


当然,通过回调方法,约束并简化了代码,比如这里将异常捕捉逻辑封装起来,对程序编码也是一种规范,可以防止不好程序编写方式,比如忘记关闭Connection,把异常和关闭Connecton都放到回调类里,用户再也不必担心connection 的关闭了

分享到:
评论

相关推荐

    Android-在回调中接收Activity结果没有任何样板代码

    "Android-在回调中接收Activity结果没有任何样板代码"的主题,就是关于如何避免这些冗余代码,提升代码的简洁性。 在Android API 16及之后的版本,系统提供了`ActivityResultContracts`和`ActivityResultLauncher`...

    JAVA8API.zip

    这在处理事件处理或回调函数时非常有用。 7. **类型推断增强**:Java 8增强了类型推断机制,使得编译器能更准确地推断出局部变量的类型,从而减少冗余的类型声明。 8. ** Nashorn JavaScript引擎**:Java 8内置了...

    如何编写高效代码

    1. **不做无谓之事**:避免不必要的操作和计算,减少冗余代码,确保每行代码都有其存在的价值。 2. **节约内存使用**:合理管理内存资源,避免过度分配和频繁回收,以保持系统稳定性和响应速度。 #### 实践技巧 1....

    λ表达式之争ScalavsJava8Java开发Java经

    λ表达式的主要优势在于其简洁性,它可以减少代码量,消除冗余,提高代码的可读性。在处理高阶函数,如映射(map)、过滤(filter)和reduce等操作时,λ表达式显得尤为高效。对于并发编程,λ表达式可以方便地定义...

    proguard v5.3 (支持java 8)

    2. **Optimizer**: 它通过消除冗余代码、内联方法、常量折叠等技术来优化字节码,提高代码执行效率。在Java 8中,这可能包括对lambda表达式、方法引用来优化。 3. **Obfuscator**: ProGuard 对代码进行重命名,使得...

    藏经阁-Java8从入门到精通-115.pdf

    1. **Lambda表达式**:Lambda表达式是一种简洁的函数式编程元素,允许将代码块作为参数传递给方法,简化了对集合的操作和其他回调机制。它通过消除冗余的匿名内部类,使得代码更加紧凑和易读。 2. **函数式接口**:...

    noiseless:在Java上实现了无噪音代码

    "noiseless"项目是一个针对Java平台的开源库,它的核心目标是实现“无噪音代码”,即在编程过程中减少不必要的、冗余的或者干扰性的代码,提高代码的可读性和维护性。这个项目可能是通过提供一系列工具、库或者编程...

    Android-LiteUtilities通过移除样板代码来加速您的Android开发

    为了解决这一问题,"LiteUtilities"应运而生,它是一个专为Android开发者设计的工具库,旨在通过去除冗余和重复的样板代码,提高开发效率,让开发者能够更专注于核心业务逻辑。 LiteUtilities的核心功能在于提供了...

    Kotlin语言教程&案例&相关项目资源.docx

    - Kotlin 的语法比 Java 更加简洁明了,去除了冗余和繁琐的部分,提高了代码的可读性和编写效率。 - 例如,在 Kotlin 中定义一个简单的函数,只需要使用 `fun` 关键字即可,而无需指定返回类型如果为 `Unit` 类型...

    EJB3.0.PDF

    1. **消除复杂接口与回调方法**:EJB2.1要求开发者创建多个接口并实现冗余的回调方法,而EJB3.0则简化了这一流程,消除了不必要的Remote、Home、EJB接口,大大减少了开发工作量。 2. **采用POJO模型**:实体Bean在...

    Kotlin从小白到大牛

    Kotlin的语法设计十分直观,它消除了许多Java中的冗余代码,如显式类型声明和空指针异常。例如,变量声明可以使用var或val关键字,前者表示可变变量,后者表示不可变变量。Kotlin也支持函数式编程特性,如高阶函数、...

    cglib实现动态代理依赖jar包

    4. **拦截方法调用**:子类中重写了父类的所有非final方法,当调用这些方法时,会通过MethodInterceptor回调实现自定义逻辑。 在实际应用中,CGLib通常与AOP框架结合使用,如Spring AOP,它可以拦截并增强方法的...

    kotlin-for-android-developers-zh kotlin电子书

    协程使开发者可以编写顺序式的异步代码,避免回调地狱,提高代码的可读性和可维护性。 6. **Anko库**:在Android开发中,Anko是Kotlin的一个流行库,提供了一系列的DSL(领域特定语言)来简化XML布局的替代、日志...

    自定义Switch控件

    5. **去除冗余功能** "去掉了一些乱七八糟的东西"可能指的是简化了控件,仅保留基本的开关功能。这有助于提高代码的可读性和性能,同时使控件更易于集成和复用。 6. **设置初始值** 自定义Switch控件应允许开发者...

    EJB 3.0 简介

    1. **消除了不必要的接口**:不再需要Remote, Home, EJB接口及回调方法实现,减少了代码冗余。 2. **POJO模型**:实体Bean采用简单Java Bean实现,无需依赖容器即可运行和测试。 3. **O/R Mapping技术**:通过ORM...

    JDK1.5 包~~~~~~~~

    这在需要一次性使用的类或接口实现中非常有用,尤其在事件处理和回调机制中。 ### 9. 数组校验(Array Covariance) 在JDK1.5之前,数组的类型检查相对较弱,可能导致类型不匹配的问题。1.5版本增强了数组的类型...

    android 俄罗斯方块

    我们将在SurfaceHolder的回调方法中执行绘制操作,包括清除屏幕、绘制当前方块和已固定的方块。 游戏的交互部分也很重要。用户可能需要控制方块的左右移动和快速下落。Android提供了多种事件监听机制,如...

    Android常用工具类

    此类通常包含检查权限状态、请求权限以及处理回调的方法。 - ` ActivityCompat` 和 ` Dexter`:`ActivityCompat`是Android Support Library的一部分,用于处理权限请求;`Dexter`是第三方库,简化了权限请求的流程...

Global site tag (gtag.js) - Google Analytics