为什么要在方法体内定义类?
@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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这样做只是一种良好的封装吧. 首先 ExecuteStatementCallback 主要作为一个回调, 它本身的代码量比较小, 如果作为单独的一个类的话, 对工程管理来说也不太合适; 第二, 因为这样的回调类和业务代码的关联很大, 并且通常是只在一个地方使用, 因此可以在方法中定义这样的类, 进而可以实现良好的封装.
一般这样的情况下, 就如上面朋友所说的, 使用匿名的内部类比较好, 这样代码会更加简洁一些.
参考new Thread(new Runable())
这个叫做内部类,最常用的是匿名内部类吧,比如说new后面跟着接口,其实是实现了该接口的一个匿名内部类
内部类还有好多种形式,具体用法,意义自己查资料。