Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java RowMapper如何成为匿名类_Java_Spring - Fatal编程技术网

Java RowMapper如何成为匿名类

Java RowMapper如何成为匿名类,java,spring,Java,Spring,我在阅读《Spring in Action》时发现了类似这样的东西,如果RowMapper是文档中的一个接口,那么有人能解释一下我们是如何将它作为一个匿名类使用的吗 public Employee getEmployeeById(long id) { return jdbcTemplate.queryForObject( "select id, firstname, lastname, salary " + "from employee wh

我在阅读《Spring in Action》时发现了类似这样的东西,如果RowMapper是文档中的一个接口,那么有人能解释一下我们是如何将它作为一个匿名类使用的吗

 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);
    }
公共雇员getEmployeeById(长id){ 返回jdbcTemplate.queryForObject( 选择id、姓氏、姓氏、薪资+ “来自id=?”的员工, 新的行映射器(){ 公共雇员映射行(结果集rs, int rowNum)抛出SQLException{ 员工=新员工(); employee.setId(rs.getLong(“id”)); employee.setFirstName(rs.getString(“firstname”); employee.setLastName(rs.getString(“lastname”); 员工工资(rs.getBigDecimal(“工资”)); 返回员工; } }, 身份证); } 语法

new SomeInterface() {
  // Definition for abstract methods
}
定义一个。只要接口中指定的所有方法都在大括号中定义,这就是实现给定接口的有效类


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

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

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

public A implements B {

}
您可以引用该类的实例,将其声明为接口

B b = new A();
您也可以使用匿名类来完成此操作。 唯一要做和记住的事情(对于编译器),就是必须实现接口本身中定义的所有方法

该解决方案是一种更简洁的方法:

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;
            }
     }
}
public EmployeeController{
公共雇员getEmployeeById(长id){
返回jdbcTemplate.queryForObject(
选择id、姓氏、姓氏、薪资+
“来自id=?”的员工,
新建CustomRowMapper(),
身份证);
}
类CustomRowMapper实现RowMapper(){
公共雇员mapRow(ResultSet rs,int rowNum)抛出SQLException{
员工=新员工();
employee.setId(rs.getLong(“id”));
employee.setFirstName(rs.getString(“firstname”);
employee.setLastName(rs.getString(“lastname”);
员工工资(rs.getBigDecimal(“工资”));
返回员工;
}
}
}