может scala неявное преобразование из `Long` в` AnyRef` [дубликат]

Он пытался подключиться к более старой версии MySQL («версия», «5.1.73»); когда вы используете новую версию драйвера, вы получаете сообщение об ошибке «com.mysql.cj.jdbc.Driver», даже если вам не нужно указывать, какой из них вы используете:

Загрузка класса com.mysql.jdbc.Driver'. This is deprecated. The new driver class is com.mysql.cj.jdbc.Driver '. Драйвер автоматически регистрируется через SPI, и ручная загрузка класса драйвера вообще не нужна.

blockquote>

Я изменил объявление использовать версию mysql-connector-java версии 5.1.38, а в коде я сохранил файл com.mysql.jdbc.Driver.


    mysql
    mysql-connector-java
    5.1.38

Все началось, когда я увидел Ankit Jain's ответ

1
задан Alex 16 January 2019 в 13:46
поделиться

1 ответ

Вероятно, причина, по которой неявное преобразование не использовалось во втором примере, заключается в следующем:

// val l: AnyRef = 10L
// error: the result type of an implicit conversion must be more specific than AnyRef.

Этот ответ может объяснить, почему это происходит.

Однако, вы можете переписать свой метод, чтобы заставить его работать, используя неявные доказательства.

def testLong[T](v: T)(implicit ev: T => AnyRef): Unit = {             
  println(v.getClass)
}

testLong(10L)
// class java.lang.Long

Любопытно, что если вы сделаете метод специфичным только для Long, напечатанный класс изменится.

def testLong(v: Long)(implicit ev: Long => AnyRef): Unit = {             
  println(v.getClass)
}

 testLong(10L)
// long
0
ответ дан Luis Miguel Mejía Suárez 16 January 2019 в 13:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: