【发布时间】:2012-07-28 05:19:44
【问题描述】:
我想在 scala (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>
但这不能编译。
[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)
我不知道是什么问题。有什么建议/想法吗?
好极了 加菲猫克隆
【问题讨论】:
-
我们需要知道
Key的样子。因为如果我使用public interface Key<T>,上面的代码编译得很好。 -
@GarfieldKlon 您正在使用哪个版本的 scala?
-
@0__ 在哪个版本下编译?
-
@Richard Scala 2.9.1, 2.9.2, 2.10.0-M6 - 因为我不知道
setAttributeLocal会是什么,所以我没有尝试写那个我>。所以错误一定存在,因此问题需要包含该信息。 -
setAttributeLocal的类型签名是什么?
标签: java scala generics methods implements