【发布时间】:2019-05-31 21:03:22
【问题描述】:
我正在尝试在 Groovy 中使用 Java 库,但 Groovy 用自己的方法覆盖了名为 join 的方法之一。
以下代码失败:
%%classpath add mvn
tech.tablesaw tablesaw-core 0.32.6
tech.tablesaw tablesaw-beakerx 0.32.6
com.jimmoores quandl-tablesaw 2.0.0
%import com.jimmoores.quandl.*
%import com.jimmoores.quandl.tablesaw.*
%import tech.tablesaw.api.*
// display Tablesaw tables with BeakerX table display widget
tech.tablesaw.beakerx.TablesawDisplayer.register()
TableSawQuandlSession session = TableSawQuandlSession.create();
Table table1 = session.getDataSet(DataSetRequest.Builder.of("FRED/BCNSDODNS").build());
table1.column("Value").setName("Corporate Credit");
Table table2 = session.getDataSet(DataSetRequest.Builder.of("FRED/CMDEBT").build());
table2.column("Value").setName("Household Credit");
Table result = table1.join("Date").inner(table2, "Date");
错误是:
groovy.lang.MissingMethodException:没有方法签名:java.lang.String.inner() 适用于参数类型:(tech.tablesaw.api.Table, java.lang.String)
这很奇怪Table.join(String) 返回一个DataFrameJoiner:https://static.javadoc.io/tech.tablesaw/tablesaw-core/0.32.6/tech/tablesaw/api/Table.html#join-java.lang.String...-
我认为正在发生的事情是 Table 是 Iterable<Row> 所以也许 Groovy 正在接受 its own join method。
真正奇怪的是,如果我将 Tablesaw 版本从 0.32.6 切换到 0.24.9,即使 Table also implements Iterable<Row> in that version 也能正常工作
知道如何强制 Groovy 使用 Tablesaw 库中的 join 方法而不是它自己的 join 方法吗?
【问题讨论】:
-
也可以考虑在 Groovy 用户邮件列表中询问。
标签: groovy