我读了Spring,发现这样的东西任何人都可以解释我们如何使用RowMapper作为匿名类,如果它是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);
}发布于 2013-08-30 13:32:04
匿名类new Something() {...}不是Something的实例。相反,它是Something的子类/实现。因此,从接口派生匿名类是非常有效和有用的。
发布于 2013-08-30 13:46:04
匿名类不是类的实例,而是定义类的另一种方法,类似于嵌套类,但可重用性较低,因为它与方法相关。因为您可以定义实现接口的类。
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;
}
}
}发布于 2013-08-30 13:31:55
语法
new SomeInterface() {
// Definition for abstract methods
}定义一个匿名类。只要接口中指定的所有方法都在大括号中定义,这就是实现给定接口的有效类。
注意,这个表达式隐式地定义了一个匿名类和该类的一个实例。
https://stackoverflow.com/questions/18534021
复制相似问题