2013-05-16 70 views
0

我期待在蜂巢开源代码和跨一个奇怪的构造函数调用来:构造函数调用中的另一个方法定义?

public ResultSet getUDTs(String catalog, String schemaPattern, 
    String typeNamePattern, int[] types) throws SQLException { 

    return new HiveMetaDataResultSet(
     Arrays.asList("TYPE_CAT", "TYPE_SCHEM", "TYPE_NAME", "CLASS_NAME", "DATA_TYPE" 
       , "REMARKS", "BASE_TYPE") 
     , Arrays.asList("STRING", "STRING", "STRING", "STRING", "INT", "STRING", "INT") 
     , null) { 

    public boolean next() throws SQLException { 
     return false; 
    } 
}; 

}

为HiveMetaDataResultSet的构造函数的定义是采取三个列表作为参数。

我的问题是什么是:

public boolean next() throws SQLException { 
    return false; 
} 

部分别在这种情况下?它不是一个匿名调用作为参数,因为这3个参数是由它自己完成的,而且这个参数是在构造函数调用的主体中。

回答

6

该方法返回一个anonymous inner class的实例。因此,这是方法中的类定义,以及该类中的方法定义。

从该方法返回的对象是类的一个实例,其定义右其中该方法返回,且类是HiveMetaDataResultSet一个亚类中,与next()重写到右边定义那里next实现。

+0

谢谢你帮助我!我现在明白了。 HiveMetaDataResultSet类是一个抽象类,因此在实例化它时,需要提供空方法签名的实际定义。 – Joe

相关问题