class AstBuilder(conf: SQLConf) extends SqlBaseBaseVisitor[AnyRef] with Logging {
...
override def visitSingleStatement(ctx: SingleStatementContext): LogicalPlan = withOrigin(ctx) {
visit(ctx.statement).asInstanceOf[LogicalPlan]
}
}
visit是 antlr 的AbstractParseTreeVisitor的一个方法, 返回类型是 T, 函数签名如下
public T visit(ParseTree tree) {
return tree.accept(this);
}
我的疑问是为什么可以将返回类型转成 LogicalPlan, 这个过程发生了啥??