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

发布于 2022-09-04 01:17:24 字数 793 浏览 17 评论 0

    @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呢?这样做有什么好处?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

錯遇了你 2022-09-11 01:17:24

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

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

萌︼了一个春 2022-09-11 01:17:24

参考new Thread(new Runable())

只怪假的太真实 2022-09-11 01:17:24

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

new Runnable(){

            @Override
            public void run() {
                
            }
        };

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

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文