[英]Scala - Java interop - is it possible to “choose” the called java method from scala?
我在Scala代碼(scala 2.10.4)中調用Jedis(Java)時遇到一些互操作性問題。
我有一個在隱式類中實現的特征
在基礎類上調用方法時出現以下錯誤
implicit class Redis(private val underlying: Jedis) extends com.dy.storage.Redis {
override def del(keys: String*): Long = {
underlying.del(keys: _*)
}
override def del2(keys: Seq[Array[Byte]]): Long = {
underlying.del(keys: _*)
}
}
收到以下錯誤( scala 2.10.4
):
no `: _*' annotation allowed here
[error] (such annotations are only allowed in arguments to *-parameters)
[error] underlying.del(keys: _*)
[error] ^
[error] /Users/avnerbarr/workspace/redis-hashed-no `: _*' annotation allowed here
[error] (such annotations are only allowed in arguments to *-parameters)
[error] underlying.del(keys: _*)
[error] ^
我試圖添加一個包裝器並將有問題的調用移到隱式類之外:
override def del(keys: String*): Long = {
Wrapper.delete(underlying, keys)
}
object Wrapper {
def delete(u : Jedis, str: Seq[String]): Long = {
u.del(str:_*)
}
}
然后出現此錯誤:
overloaded method value del with alternatives:
[error] (x$1: String)Long <and>
[error] (x$1: <repeated...>[String])Long <and>
[error] (x$1: Array[Byte])Long <and>
[error] (x$1: <repeated...>[Array[Byte]])Long
[error] cannot be applied to (Char)
[error] u.del(a:_*)
[error] ^
[info] Checking every *.class/*.jar file's SHA-1.
[error] one error found
使用scala 2.11時,此代碼構建完全沒有問題,僅在scala 2.10中解決了該問題
是否可以“選擇”而不推論應該調用的正確方法?
您應該提供Jedis
和com.dy.storage.Redis
代碼。
以下代碼編譯:
src / main / java / Jedis.java
interface Jedis {
long del(String... keys);
long del(byte[]... keys);
}
src / main / scala / com / dy / storage / Redis.scala
package com.dy.storage
trait Redis {
def del(keys: String*): Long
def del2(keys: Seq[Array[Byte]]): Long
}
src / main / scala / App.scala
object App {
implicit class Redis(private val underlying: Jedis) extends com.dy.storage.Redis {
override def del(keys: String*): Long = {
underlying.del(keys: _*)
}
override def del2(keys: Seq[Array[Byte]]): Long = {
underlying.del(keys: _*)
}
}
}
build.sbt
name := "scala2104"
version := "0.1"
scalaVersion := "2.10.4"
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.