Chcę utworzyć specyficzną metodę generyczną w Scali. Zajmuje dwa parametry. Pierwszy z nich jest typem ogólnego interfejsu Java (pochodzi z zapytania o kryteria JPA). Obecnie wygląda następująco:Metoda Scala, w której typ drugiego parametru jest równy części rodzaju ogólnego od pierwszego parametru
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>
Teraz chcę osiągnąć następujące: wartość jest aktualnie typu java.lang.Object. Ale chcę, aby był bardziej szczegółowy. Wartość musi być tego samego typu, co symbol zastępczy "_" z pierwszego parametru (a zatem reprezentuje "T" w interfejsie Java).
Czy to jakoś możliwe i jak?
BTW Przepraszamy za głupi tytuł zapytania (jakieś sugestie?)
EDIT: dodał addtional przykład, który może sprawić, że problemem bardziej jasne:
// 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)
Wow, jestem głęboko impr essed;) Dzięki za szybką odpowiedź. Właściwie to działa. Scala rocks! BTW: nie tak ważne, ale czy byłoby to również możliwe w Javie? – ifischer
Tak, jest to również możliwe w Javie: "publiczna Osoba genericFind (SingularAttribute < Person, T > atrybut, wartość T) {...}". Mam nadzieję że to pomoże :). Zauważ, że istnieją pewne drobne problemy z tym, że na przykład chcesz przekazać podtyp T zamiast instancji dokładnie T. Możesz obejść to z dodatkową adnotacją, ale prawdopodobnie jest poza tym, czego potrzebujesz. –
Calum
Dobrze, dobrze wiedzieć, że jest to możliwe w Javie. Nie potrzebuję tej dodatkowej adnotacji, ale chciałbym się dowiedzieć, co to jest! Dzięki – ifischer