Scala Universe
Eine aufgelöste Sicht auf JVM-Typen, Generics und Annotationen.
Die Idee
Scala Universe formt Java Reflection zu einem strukturierten Modell aufgelöster Typen. Felder, Methoden, Konstruktoren, Bean-Properties und Annotationen lassen sich untersuchen, ohne die konkreten Typen geerbter Generics zu verlieren.
Was es kann.
Aufgelöste Generics
Geerbte Member mit den konkreten Typargumenten der Unterklasse untersuchen.
Einheitliche Member
Felder, Methoden, Konstruktoren und Parameter über ein konsistentes Typmodell finden.
Property-Introspektion
Bean- oder annotationsbasierte Property-Modelle für Framework-Code erzeugen.
Installation
libraryDependencies += "com.anjunar" %% "scala-universe" % "1.0.3"
Paket: com.anjunar:scala-universe
Direkt loslegen.
Eine JVM-Klasse mit TypeResolver auflösen und danach ihre Member oder ein Property-Modell mit BeanIntrospector untersuchen.
Geerbte generische Member auflösen
Die Methode ist mit T deklariert; für StringBox ist ihr aufgelöster Rückgabetyp String.
import com.anjunar.scala.universe.TypeResolver
abstract class Box[T] { def getValue: T }
class StringBox extends Box[String] {
override def getValue: String = "hello"
}
val resolved = TypeResolver.resolve(classOf[StringBox])
val method = resolved.findMethod("getValue")
println(method.returnType.raw) // class java.lang.StringEine Bean-Property untersuchen
Das Property-Modell liefert den Typ und kann die zugrunde liegende Instanz lesen oder ändern.
import com.anjunar.scala.universe.introspector.BeanIntrospector
class Person {
private var firstName = "Ada"
def getFirstName: String = firstName
def setFirstName(value: String): Unit = firstName = value
}
val model = BeanIntrospector.createWithType(classOf[Person])
val property = model.findProperty("firstName")
val person = new Person
property.set(person, "Grace")
println(property.get(person)) // GraceBewusst gestaltet.
Das aufgelöste Klassenmodell trägt generische Substitutionen bis zu den einzelnen Membern. Frameworks arbeiten so mit konkreten Typen statt wiederholt mit rohen Reflection-Werten.
Mach es zu deinem Werkzeug.
Weiter entdecken.
Scala.js UI
Ein Scala-3- und Scala.js-UI-Framework für serverseitig gerenderte Anwendungen.
↗Hibernate DDL Manager
Kontrollierte Schemaentwicklung auf Basis von Hibernate-Metadaten.
↗JSON Mapper
JSON-Mapping für bestehende Objektgraphen und Domänenmodelle.
↗Scala JS Ember
Ein modularer Rich-Text-Editor auf Basis eines unveränderlichen Dokumentmodells.
↗Scala Reflect
Zur Compile-Zeit erzeugte Typmetadaten für JVM und Scala.js.
↗