Result type of an implicit conversion must be more specific than AnyRef

The reason is that the numeric type of the literals 1 and 2 is Int which extends AnyVal which, in turn, extends Any. On the other hand String extends AnyRef which, in turn, extends Any. So as you can see AnyVal (Int‘s parent) does not extend AnyRef. You can solve this in one of two ways.

The first one is changing the type from AnyRef to Any as described by Nate.

The second one is using a type ascription for the literals 1 and 2 so that they are considered of type java.lang.Integer which extends java.lang.Object. Note also that AnyRef is just an alias for java.lang.Object. So, using your definition the following should work:

scala> h(1: java.lang.Integer, 2: java.lang.Integer)
res2: String = 1,2

More info on Scala Hierarchy

Leave a Comment