Метод Scala, в котором тип второго параметра равен части универсального типа из первого параметра - PullRequest
5 голосов
/ 18 июня 2010

Я хочу создать определенный общий метод в Scala. Требуется два параметра. Первый тип универсального интерфейса Java (из запроса критериев JPA). В настоящее время это выглядит так:

def genericFind(attribute:SingularAttribute[Person, _], value:Object) {
  ...
}

// The Java Interface which is the type of the first parameter in my find-method:
public interface SingularAttribute<X, T> extends Attribute<X, T>, Bindable<T>

Теперь я хочу добиться следующего: значение в настоящее время имеет тип java.lang.Object. Но я хочу сделать это более конкретным. Значение должно быть того же типа, что и заполнитель "_" из первого параметра (и, следовательно, представляет "T" в интерфейсе Java)

Это как-то возможно и как?

Кстати, простите за глупый заголовок вопроса (есть предложения?)

EDIT: добавлен дополнительный пример, который может прояснить проблему:

// A practical example how the Scala method could be called 

// Java class:
public class Person_ {
  public static volatile SingularAttribute<Person, Long> id;
}

// Calling the method from Scala:
genericFind(Person_.id, Long)

1 Ответ

9 голосов
/ 18 июня 2010

верхней части моей головы (я все еще начинаю со Scala):

def genericFind[T](attribute:SingularAttribute[Person, T], value:T) {
  ...
}
...