Scala Reflection - Ładowanie lub znajdowanie klas w oparciu o cechę
Czy interfejs odbicia scala (2.10) zapewnia łatwiejszy sposób przeszukiwania załadowanych klas i filtrowania listy do określonych klas, które implementują zdefiniowaną cechę? to znaczy;
trait Widget {
def turn(): Int
}
class Cog extends Widget {
def turn() = {
5
}
}
class Sprocket extends Widget {
def turn() = {
10
}
}
Chcę przeszukać bibliotekę klas w poszukiwaniu wszystkiego, co rozszerza Widget i tworzy instancję tych klas. Skończyłbym z instancjąCog
iSprocket
.
Zrobiłem podobnie w Javie iterując przez katalogi klas, tworząc nazwy klas i używając Class.forName do załadowania obiektu klasy, a następnie sprawdzenia. Zastanawiam się tylko, czy interfejs API odbicia daje łatwiejszy sposób wyszukiwania. Wszystkie przykłady, które do tej pory widziałem, zawsze zaczynały się od instancji znanej klasy, a nie od przeszukiwania dostępnych klas.