Каковы различия между Интервалом и Целым числом в Scala?

Я всегда использую их. Я раньше только использовал их в запросах, включающих всего одну таблицу, но затем я осознал a) запросы, включающие всего одну таблицу, редки и b) запросы, включающие всего одну таблицу, редко остаются тот путь долгое время. Таким образом, я всегда вставлял их от запуска так, чтобы я (или кто-то еще) не имел к ретро, соответствуют им позже. О, и BTW: Я называю их "именами корреляции", согласно Стандарту SQL-92 :)

51
задан SongWithoutWords 4 June 2018 в 16:15
поделиться

4 ответа

«В чем разница между Integer и Int?»

Integer - это просто псевдоним для java.lang.Integer. Int - это целое число Scala с дополнительными возможностями.

Заглянув в Predef.scala, вы можете увидеть это псевдоним:

 /** @deprecated use <code>java.lang.Integer</code> instead */
  @deprecated type Integer = java.lang.Integer

Однако существует неявное преобразование из Int в java.lang.Integer, если вам это нужно, что означает, что вы можете использовать Int в методах, которые принимают целое число.

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

43
ответ дан 7 November 2019 в 10:21
поделиться

Я думаю, что проблема, которую вы видите, связана с упаковкой / распаковкой типов значений и использованием класса Java Integer.

Думаю, ответ здесь: Упаковка и распаковка в Scala . В Scala нет скрытой распаковки. Вы определили i как Java-класс Integer, но в i> 3 обрабатывается 3 и int.

4
ответ дан 7 November 2019 в 10:21
поделиться

Целое число импортируется из java.lang.Integer и предназначено только для совместимость с Java. Поскольку это класс Java, конечно, у него не может быть метода с именем «<». РЕДАКТИРОВАТЬ: Вы можете смягчить эту проблему, объявив неявное преобразование из Integer в Int.

 implicit def toInt(in:Integer) = in.intValue()

Вы все равно получите предупреждение об устаревании.

5
ответ дан 7 November 2019 в 10:21
поделиться

Integer - это класс Java, java.lang.Integer . Он отличается от примитивного типа Java int , который не является классом. Не может быть определено <, потому что Java не позволяет определять операторы для классов.

Теперь вы можете задаться вопросом, почему такой тип вообще существует? Ну, примитивные типы нельзя передавать как ссылки, поэтому вы не можете передать int методу, ожидающему java.lang.Object , например, эквивалентному Scala AnyRef . Для этого вы помещаете этот int в объект Integer , а затем передаете Integer .

3
ответ дан 7 November 2019 в 10:21
поделиться
Другие вопросы по тегам:

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