スカラ(2.9.2)でジェネリックを使用するJavaメソッドを実装したいと思います。そのメソッドを実装したいスカラ、汎用Javaメソッドを実装できません
public <T extends Number> void setAttribute(Key<T> key, Number value);
Scalaのコード:
def setAttribute[T <: Number](key: Key[T], value: Number) = {
setAttributeLocal(key, value) }
private def setAttributeLocal[T](key: Key[T], value: T) = {
val stringValue = ConvertUtils.convert(value, classOf[String]).asInstanceOf[String]
session = session + (key.getValue() -> stringValue)
}
キーは次のようになります。
public class Key<T>
しかし、私は...
Javaインタフェースのメソッドを失敗していますしかし、これはコンパイルされません。
[error] found : mypackage.Key[T]
[error] required: mypackage.Key[java.lang.Number]
[error] Note: T <: java.lang.Number, but Java-defined class Key is invariant in type T.
[error] You may wish to investigate a wildcard type such as `_ <: java.lang.Number`. (SLS 3.2.10)
[error] setAttributeLocal(key, value)
私は問題が何であるか把握できません。どんな提案/アイデア?
greez GarfieldKlon
'Key 'の仕組みを知る必要があります。私が 'public interface Key'を使用すると、上のコードがうまくコンパイルされるからです。 –
@GarfieldKlonどのスカラのバージョンで作業していますか? –
@ 0__どのバージョンでコンパイルしますか? –