簡體   English   中英

Scala隱式轉換未應用到Java參數模式

[英]Scala implicit conversion not getting applied on Java argument pattern

我給了靜態方法

static void foo(Object... params)

在Java類Bar中,並計划如下調用它:

Bar.foo('x')

由於該方法需要Java字符,因此該方法不起作用,並且不應用現有的隱式轉換。

Bar.foo('x' : Character)
Bar.foo(new Character('x'))

都可以解決問題,但會損害可讀性。 將這些結構進行隱式轉換

implicit def baz(c : Char) = c : Character

不起作用,我不明白為什么。 所以我的問題是:這是什么問題? 有解決辦法嗎?

編譯器非常具體地說明了為什么它不使用以下任何隱式函數:

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')

可以轉換為對象類型的唯一變量是類實例。 不包括基本類型,如int,boolean,double。 這些分別需要轉換為以下類型:整數,布爾值,雙精度型。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM