Scala隐式转换未应用于Java参数模式
我已经给出了静态方法
static void foo(Object... params)
在Java类栏中,并计划如下调用它:
Bar.foo('x')
这将不起作用,因为该方法需要一个Java字符,而且不知何故,现有的隐式转换没有被应用
Bar.foo('x' : Character)
Bar.foo(new Character('x'))
两者都会起作用,但会损害可读性。将这些结构放入隐式转换中
implicit def baz(c : Char) = c : Character
不起作用,我不明白为什么。所以我的问题是: 这里有什么问题? 有办法吗
# 1 楼答案
编译器非常明确地说明了为什么它不会使用以下任何一项:
Object
是AnyRef
的同义词,因为这是它需要调用的值foo
,所以它拒绝应用任何隐式转换但是,您可以在
Bar.foo
周围定义一个包装器,以便使用文字字符:# 2 楼答案
唯一可以转换为对象类型的变量是类实例。 不包括int、boolean、double等基本类型。 这一个需要分别转换为类型:Integer、Boolean、Double