У меня есть метод Java, который принимает java.lang.Object. Сейчас я пытаюсь передать ему Scala Int, но компилятор жалуется на несоответствие типов Int и Object.
Это кажется довольно странным, поскольку я полагаю, что Scala Int наследуется от AnyRef и должен быть таким же, как java.lang.Object?





Однако Scala Int не расширяет AnyRef - он расширяет AnyVal, который не является совместимым с java.lang.Object, и больше похож на Java int. В Scala также есть класс Integer, который является просто псевдонимом для java.lang.Integer - используйте его, если вам нужно передать его как объект.
Есть две ветви классов Scala, унаследованных от корневого класса Scala - Any:
(См. Диаграмму в https://docs.scala-lang.org/tour/unified-types.html)
AnyRef эквивалентен java.lang.Object. Следовательно, при вызове методов Java, принимающих Object, AnyVal нельзя напрямую передать перед упаковкой. Это можно сделать с помощью явного объявления типа:
JavaClass.methodWithObject (10: java.lang.Integer)
Дополнительные обсуждения относятся к: Тип результата неявного преобразования должен быть более конкретным, чем AnyRef.
Возможный дубликат В чем разница между Int и Integer в Scala?