基于接口的匿名类定义......也许?

Mik*_*Lin 12 java

我在Spring in Action一书中看到了这个Java片段,但我对语言结构并不熟悉.

new RowMapper() {
  public Object mapRow() throws SQLException, DataAccessException {
    Motorist motorist = new Motorist();
    motorist.setId(rs.getInt(1));
    motorist.setEmail(rs.getString(2));
    motorist.setPassword(rs.getString(3));
    motorist.setFirstName(rs.getString(4));
    motorist.setLastName(rs.getString(5));
    return motorist;
  }
}
Run Code Online (Sandbox Code Playgroud)

根据Spring文档,RowMapper是一个接口.它看起来像一个基于RowMapper接口的匿名类定义.该new关键字有点令人困惑,让我想知道这是否也创建了一个匿名类的实例.我猜是的,因为如果类没有名称,你将如何定义它的行之后创建一个实例?

任何人都可以证实我的猜测:

  • 这是一个基于RowMapper接口的匿名类定义,和
  • 它创建该类的单个实例?

aio*_*obe 11

这是一个基于RowMapper接口的匿名类定义

这正是它的本质.

它创建该类的单个实例?

是的.那是对的.


ada*_*shr 5

该代码以匿名方式实现接口。

语法类似于:

Runnable runnable = new Runnable() {
    public void run() {
    }
};
Run Code Online (Sandbox Code Playgroud)

注意声明末尾的分号。这里的 runnable 对象虽然持有对 Runnable 接口的引用,但实际上包含已实现的对象。这就是运行时多态性!