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
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…