首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >防止GroovyDefaultMethods连接()对Java类的join()方法进行跟踪?

防止GroovyDefaultMethods连接()对Java类的join()方法进行跟踪?
EN

Stack Overflow用户
提问于 2019-05-31 21:03:22
回答 1查看 157关注 0票数 1

我试图在Groovy中使用一个Java库,但是Groovy正在用自己的方法覆盖命名为join的方法之一。

以下代码失败:

代码语言:javascript
复制
%%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)返回一个DataFrameJoinerhttps://static.javadoc.io/tech.tablesaw/tablesaw-core/0.32.6/tech/tablesaw/api/Table.html#join-java.lang.String...-

我认为现在发生的事情是Table是一个Iterable<Row>,所以可能Groovy正在选择它自己的连接方法

奇怪的是,如果我将Tablesaw版本从0.32.6切换到0.24.9,即使是在那个版本中,它也能工作。

您知道如何才能强制Groovy使用表库中的join方法而不是它自己的join方法吗?

EN

回答 1

Stack Overflow用户

发布于 2019-06-01 02:40:39

根据另一个答案,这种特殊情况可以通过在方法调用中使用显式类型来解决。以下是有关GroovyDefaultMethod覆盖的一般主题的更多背景信息。

有关这方面的文件很少。一些旧的电子邮件线程与来自DefaultGroovyMethods的这些方法有关。

  • 如何应用DefaultGroovyMethods中的方法? 因此,当我们创建ArrayList元类时,我们检查ArrayList类,从中获取所有的方法,并从中生成我们的元方法。然后我们得到DGM方法列表,并根据继承应用所有方法.“

这可能解释了为什么在不同的Tablesaw版本中得到不同的结果,具体取决于来自Iterable的确切继承细节。

  • 从DefaultGroovyMethods重写方法如果要在脚本的持续时间内执行此操作,可以使用每个实例的metaClass来执行: this.metaClass.println ={ Object value -> System.out.println "woo $value“}

由此,我相信您可以修改Table的元类以使用您想要使用的方法。由于DefaultGroovyMethods的应用程序也取决于继承细节,所以您也可以尝试子类表。

元编程文档也可能会有所帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56401713

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档