Zum Inhalt springen
Anjunar/ DOCS

Methoden

Methoden erscheinen einmal pro Signatur: Die spezifischste Überschreibung gewinnt, Bridges und synthetische Methoden fallen weg, und Rückgabetypen werden gegen den Ausgangstyp aufgelöst.

Suche

Öffentlich in der Hierarchie oder alles an der Klasse

findMethod findet öffentliche Methoden wie Class.getMethod, geerbte eingeschlossen. findDeclaredMethod findet jede Methode der Klasse selbst, private eingeschlossen. Parameter werden als gelöschte Klassen angegeben.

scala
class User(val name: String) { def greeting(prefix: String): String = s"$prefix $name" private def secret(): String = "hidden" } val user = TypeResolver.resolve(classOf[User]) println(user.findMethod("greeting", classOf[String]).returnType.name) // String println(user.findMethod("secret")) // null println(user.findDeclaredMethod("secret").name) // secret
Überschreibungen

Ein Eintrag pro Signatur

overrides listet die Methoden der Obertypen mit gleichem Namen und gleichen Parametertypen. methods lässt jede davon weg; wer über methods iteriert, sieht keine Signatur doppelt.

scala
trait Greeter { def greet(name: String): String } class Polite extends Greeter { def greet(name: String) = s"Good day, $name" } val greet = TypeResolver.resolve(classOf[Polite]).findMethod("greet", classOf[String]) println(greet.owner.name) // Polite println(greet.overrides.map(_.owner.name).mkString(", ")) // Greeter
Annotationen vom Interface

annotations einer Methode enthält die deklarierten Annotationen von allem, was sie überschreibt. Eine Annotation an der Trait-Methode wird an der Implementierung gefunden.

Aufruf

invoke

invoke macht die Methode zugänglich und ruft sie mit den gegebenen Argumenten auf. Ausnahmen der Methode kommen wie bei einfacher Reflection in InvocationTargetException verpackt an.

scala
val ada = new User("Ada") println(user.findMethod("greeting", classOf[String]).invoke(ada, "Hello")) // Hello Ada println(user.findDeclaredMethod("secret").invoke(ada)) // hidden
Scala

Welche Methoden eine Scala-Klasse hat

Accessoren, Setter und vom Compiler erzeugte Member sind für die JVM gewöhnliche Methoden und erscheinen in methods.

val name
Methode name().
var name
Methoden name() und name_$eq(value).
case class
copy, productArity, productElement, equals, hashCode, toString und _1, _2 …
default arguments
Methoden wie greeting$default$1 für jeden Default.