有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

不起作用,我不明白为什么。所以我的问题是: 这里有什么问题? 有办法吗


共 (2) 个答案

  1. # 1 楼答案

    编译器非常明确地说明了为什么它不会使用以下任何一项:

    error: the result type of an implicit conversion must be more specific than AnyRef
    

    ObjectAnyRef的同义词,因为这是它需要调用的值foo,所以它拒绝应用任何隐式转换

    但是,您可以在Bar.foo周围定义一个包装器,以便使用文字字符:

    def barFoo(chars: Character*) = Bar.foo(chars.toArray: _*)
    barFoo('x')
    
  2. # 2 楼答案

    唯一可以转换为对象类型的变量是类实例。 不包括int、boolean、double等基本类型。 这一个需要分别转换为类型:Integer、Boolean、Double