Alle Frameworks
ANJUNAR / OPEN SOURCE

Scala Universe

Eine aufgelöste Sicht auf JVM-Typen, Generics und Annotationen.

01

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.

02

Was es kann.

01

Aufgelöste Generics

Geerbte Member mit den konkreten Typargumenten der Unterklasse untersuchen.

02

Einheitliche Member

Felder, Methoden, Konstruktoren und Parameter über ein konsistentes Typmodell finden.

03

Property-Introspektion

Bean- oder annotationsbasierte Property-Modelle für Framework-Code erzeugen.

03

Installation

Zum Projekt hinzufügen
libraryDependencies += "com.anjunar" %% "scala-universe" % "1.0.3"

Paket: com.anjunar:scala-universe

04

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.

Quellcode
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.String

Eine Bean-Property untersuchen

Das Property-Modell liefert den Typ und kann die zugrunde liegende Instanz lesen oder ändern.

Quellcode
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)) // Grace
05

Bewusst 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.

Dein nächster Schritt

Mach es zu deinem Werkzeug.

Sorgfältig gebaut mit Scala JS UI.Impressum