У меня проблема понимания сообщение об ошибке Scalac в этом примере:с использованием Java-шаблонный метод от Scala
Bean.java
public class Bean {
static public class Attribute<T> {
public final String name;
public Attribute(String name) {this.name = name;}
// equals and hashcode omitted for simplicity
}
public <T> void set(Attribute<T> attribute, T value) {}
public static Attribute<Long> AGE = new Attribute<Long>("age");
}
Test.scala
object Test {
def test() {
val bean = new Bean();
bean.set(Bean.AGE, 2L);
}
}
компилируя эти данные (проверено с помощью скаляра 2.9.2):
Test.scala:4: error: type mismatch;
found : Bean.Attribute[java.lang.Long]
required: Bean.Attribute[Any]
Note: java.lang.Long <: Any, but Java-defined class Attribute is invariant in type T.
You may wish to investigate a wildcard type such as `_ <: Any`. (SLS 3.2.10)
bean.set(Bean.AGE, 2L);
^
one error found
Зачем нужен атрибут [Любой]? Ведение же в Java работает отлично
благодаря
java.util.Long? typo –
@PrinceJohnWesley Упс. Да. Исправленный. Благодарю. – Jatin
Не думаете ли вы, что '23: java.lang.Long' выглядит немного лучше? Или даже 'b.set [java.lang.Long] (Bean.AGE, 23)'. – senia