제네릭 스칼라 (2.9.2)를 사용하는 자바 메서드를 구현하고 싶습니다. 하지만 ... 실패하고 있습니다 스칼라, 일반 자바 메서드를 구현할 수 없습니다
자바 인터페이스 방법 :public <T extends Number> void setAttribute(Key<T> key, Number value);
그 방법을 구현하려는
스칼라 코드 :
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>
을 그러나 이것은 컴파일되지 않습니다.
[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__ 어떤 버전에서 컴파일됩니까? –