При создании реализаций заглушек java.sql.Connection
, DataSource
, ResultSet
& c. для функционального теста Scala я столкнулся с несколькими случаями, когда Java-метод перегружен, причем каждый метод отличается только типом параметра массива. Например (из java.sql.Connection
):Переопределение в Scala, перегруженных Java-методах, отличных от типа массива
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?
Это действительно интересно. Похоже, что обобщение массива в Scala теряет специфику в этом процессе, поскольку девять типов массивов в Java фактически представляют собой девять несвязанных различных типов. –
Er ... Вы пытались скомпилировать его? Для меня выглядит достаточно хорошо: 'object Foo {def bar (a: Array [Int]) = 1; def bar (a: Array [String]) = 2} ', а затем' Foo.bar (Array (1)) 'возвращает 1 и' Foo.bar (Array ("hello")) 'возвращает 2. Это Scala 2.10 +0,0. – sjrd
Какая версия Scala вы используете и какую ошибку компилятора вы получаете. В сеансе REPL я смог отлично реализовать «Connection». –