Pytanie najlepiej wyjaśnić na przykładzie:
W Javie dla menedżera JPA EntityManager mogę wykonać następujące czynności (Konto jest moją klasą Entity):
Account result = manager.find(Account.class, primaryKey);
W Scali moja naiwna próba to:
val result = manager.find(Account.class, primaryKey)
Ale kiedy próbuję używać Account.class
w Scali, wydaje się, że to nie lubi. Jak mogę określić obiekt java.lang.Class dla klasy konta w Scali?
Odpowiedzi:
Zgodnie z „ The Scala Type System ”,
Jednak
classOf[T]
igetClass
powrót nieco różne wartości, co odzwierciedla wpływ typu usunięcia w JVM w przypadku getClass.Dlatego następujące działania nie będą działać :
Istnieje bilet dotyczący rodzaju zwrotu
getClass
.( James Moore informuje, że bilet jest „teraz”, tj. Listopad 2011, dwa lata później, naprawiony.
W wersji 2.9.1
getClass
teraz:)
W 2009 roku:
Uwaga: w związku
getClass
z możliwym obejściem byłoby:źródło
classOf[Account]
w Scali jest odpowiednikiemAccount.class
w Javie.źródło