为什么要在方法体内定义类?

    @Override
    public void execute(final String sql) throws DataAccessException {
        if (logger.isDebugEnabled()) {
            logger.debug("Executing SQL statement [" + sql + "]");
        }
        class ExecuteStatementCallback implements StatementCallback<Object>, SqlProvider {
            @Override
            public Object doInStatement(Statement stmt) throws SQLException {
                stmt.execute(sql);
                return null;
            }
            @Override
            public String getSql() {
                return sql;
            }
        }
        execute(new ExecuteStatementCallback());
    }

以上这段代码来自JdbcTemplate的代码,请问为什么要在execute方法内定义类ExecuteStatementCallback呢?这样做有什么好处?

阅读 4k
3 个回答

这样做只是一种良好的封装吧. 首先 ExecuteStatementCallback 主要作为一个回调, 它本身的代码量比较小, 如果作为单独的一个类的话, 对工程管理来说也不太合适; 第二, 因为这样的回调类和业务代码的关联很大, 并且通常是只在一个地方使用, 因此可以在方法中定义这样的类, 进而可以实现良好的封装.

一般这样的情况下, 就如上面朋友所说的, 使用匿名的内部类比较好, 这样代码会更加简洁一些.

参考new Thread(new Runable())

这个叫做内部类,最常用的是匿名内部类吧,比如说new后面跟着接口,其实是实现了该接口的一个匿名内部类

new Runnable(){

            @Override
            public void run() {
                
            }
        };

内部类还有好多种形式,具体用法,意义自己查资料。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏