首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >RowMapper如何成为匿名类

RowMapper如何成为匿名类
EN

Stack Overflow用户
提问于 2013-08-30 13:23:18
回答 3查看 6.8K关注 0票数 3

我读了Spring,发现这样的东西任何人都可以解释我们如何使用RowMapper作为匿名类,如果它是RowMapper文档中的接口的话。

代码语言:javascript
复制
 public Employee getEmployeeById(long id) {
      return jdbcTemplate.queryForObject(
          "select id, firstname, lastname, salary " +
          "from employee where id=?",
          new RowMapper<Employee>() {
            public Employee mapRow(ResultSet rs,
                    int rowNum) throws SQLException {
              Employee employee = new Employee();
              employee.setId(rs.getLong("id"));
              employee.setFirstName(rs.getString("firstname"));

              employee.setLastName(rs.getString("lastname"));
              employee.setSalary(rs.getBigDecimal("salary"));
              return employee;
            }
          },
          id);
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-30 13:32:04

匿名类new Something() {...}不是Something的实例。相反,它是Something的子类/实现。因此,从接口派生匿名类是非常有效和有用的。

票数 4
EN

Stack Overflow用户

发布于 2013-08-30 13:46:04

匿名类不是类的实例,而是定义类的另一种方法,类似于嵌套类,但可重用性较低,因为它与方法相关。因为您可以定义实现接口的类。

代码语言:javascript
复制
public A implements B {

}

并且可以引用该类的实例,声明为接口。

代码语言:javascript
复制
B b = new A();

您也可以使用匿名类来完成它。唯一要做和记住的事情(为此存在编译器)是,您必须实现接口本身中定义的所有方法。

这个解决方案是一个更简洁的方法来做到这一点:

代码语言:javascript
复制
public EmployeeController {

     public Employee getEmployeeById(long id) {
          return jdbcTemplate.queryForObject(
              "select id, firstname, lastname, salary " +
              "from employee where id=?",
              new CustomRowMapper(),
              id);
        }


   class CustomRowMapper implements RowMapper<Employee>() {
            public Employee mapRow(ResultSet rs, int rowNum) throws SQLException {
              Employee employee = new Employee();
              employee.setId(rs.getLong("id"));
              employee.setFirstName(rs.getString("firstname"));

              employee.setLastName(rs.getString("lastname"));
              employee.setSalary(rs.getBigDecimal("salary"));
              return employee;
            }
     }
}
票数 1
EN

Stack Overflow用户

发布于 2013-08-30 13:31:55

语法

代码语言:javascript
复制
new SomeInterface() {
  // Definition for abstract methods
}

定义一个匿名类。只要接口中指定的所有方法都在大括号中定义,这就是实现给定接口的有效类。

注意,这个表达式隐式地定义了一个匿名类和该类的一个实例。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18534021

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档