Вы столкнулись с этой проблемой, потому что прототип метода Table.join()
выглядит следующим образом:
public DataFrameJoiner join(String... columnNames)
Источник: https://static.javadoc.io/tech.tablesaw/tablesaw-core/0.32.6/tech/tablesaw/api/Table.html#join-java.lang.String...-
Вы уже заметили, что Groovyрасширяет класс Iterable<T>
с помощью метода join()
, но его прототип выглядит следующим образом:
public String join(String separator)
Источник: http://docs.groovy -lang.org / latest / html / groovy-jdk / java / lang / Iterable.html # join (java.lang.String)
Вот почему в случае следующего:
table1.join("Date").inner(table2, "Date");
Groovyразрешает Iterable<T>.join(String separator)
вместо метода из класса Table
.Он отлично работал с версией 0.24.9 только потому, что предоставлял метод со следующим прототипом:
public DataFrameJoiner join(String columnName)
Источник: https://static.javadoc.io/tech.tablesaw/tablesaw-core/0.24.9/tech/tablesaw/api/Table.html#join-java.lang.String-
Так что в этом случае Table.join(String columnName)
переопределял метод Iterable<T>.join(String separator)
.
Решение
Вы можете решить эту проблему, сделав вызов с явной информацией о параметре String[]
, поэтому Groovy выберет правильныйметод прямо сейчас.
table1.join(["Date"] as String[]).inner(table2, "Date")
Это будет работать без какой-либо явной информации о типе параметра, если вы передадите Groovy две строки, чтобы выбрать метод varargs.
table1.join("Date", "Something").inner(table2, "Date")
Однако в случаеоднострочный аргумент, вам нужно сделать явный выбор параметра из-за определения двух методов перегрузки.