Подтвердить что ты не робот

Переопределяя в Scala перегруженные Java-методы, отличающиеся типом массива

При создании реализаций заглушек java.sql.Connection, DataSource, ResultSet & c. для функционального теста Scala я столкнулся с несколькими случаями, когда Java-метод перегружен, причем каждый метод отличается только типом параметра массива. Например (от java.sql.Connection):

PreparedStatement prepareStatement(String sql, int[] columnIndexes) throws SQLException
PreparedStatement prepareStatement(String sql, String[] columnNames) throws SQLException

Преобразован в Scala, он выглядит так:

override def prepareStatement(sql: String, columnIndexes: Array[Int]): PreparedStatement 
override def prepareStatement(sql: String, columnNames: Array[String]): PreparedStatement

но в Scala 2.9.2 это не будет компилироваться, поскольку мы различаем только параметрический тип. Помимо внедрения заглушек в Java, может ли кто-нибудь предложить умное решение?

Я был удивлен тем, что не смог найти какое-либо предварительное обсуждение этой особой проблемы Scala/Java interop... достаточно легко найти обсуждение аналогичной проблемы с varargs. Наверняка кто-то сталкивался с этим вопросом раньше? Любые указатели на предыдущее обсуждение или проблемы в Scala отслеживании проблем?

4b9b3361

Ответ 1

Это интересная проблема, но, похоже, в современных версиях компилятора это исправлено.

В scala 2.11.2

scala> :paste
// Entering paste mode (ctrl-D to finish)

def prepareStatement(sql: String, columnNames: Array[String]): String = "foo"
def prepareStatement(sql: String, columnIndexes: Array[Int]): String = "bar"

// Exiting paste mode, now interpreting.

prepareStatement: (sql: String, columnNames: Array[String])String <and> (sql: String, columnIndexes: Array[Int])String
prepareStatement: (sql: String, columnNames: Array[String])String <and> (sql: String, columnIndexes: Array[Int])String

scala> prepareStatement("bah", Array(1,2,3))
res11: String = bar

scala> prepareStatement("bah", Array("foo","bar","baz"))
res12: String = foo

и - на основе комментария @sjrd - то же самое работает и в scala 2.10.0.

В какой версии вы его протестировали?