Java Getriebe

Java und NetBeans

Möglichkeiten für eine methodvalue Implemetierung

Schon länger hatte ich mich gefragt, welche Möglichkeiten man bei einem methodvalue Attribut in der layer.xml hat. Ziel ist es ja, dass man einem <attr> Eintrag ein bestimmtes Objekt zuweisen kann und dieses Objekt durch einen Methodenaufruf erzeugt. Man hat also in dieser Methode alle Möglichkeiten das gewünschte Objekt zu beeinflussen. Aber wie muss die Methodensignatur dazu aussehen?

Nachdem ich schon länger nach dieser Information gesucht ((mehr oder weniger intensiv)) hatte, bin ich nun fündig geworden ((Natürlich bei der Suche nach etwas vollkommen anderem)). Am Ende der JavaDoc zu XMLFileSystem steht die Antwort:

The methodvalue attribute can be in form of pgk1.pkg2.ClassName.methodName which should point to existing class with static method usually having no, one or two arguments. This method does not need to be public or in public class, if the filesystem has permissions to call the method. The method can take one of the following signatures:

static Value methodName();
static Value methodName(FileObject fo);
static Value methodName(FileObject fo, String attrName);
static Value methodName(Map attrs); // since 7.0
static Value methodName(Map attrs, String attrName); // since 7.0

where Value can be any java type.

Es muss also eine statische Methode sein mit einem passenden Namen. Da der Namen in der layer eingetragen wird, ist er nicht unbedingt vorgegeben. Allerdings sollte man darauf achten, dass diese Method nicht überladen wird. In der Layer wird zwar der Name angegeben, aber nicht die Parameterliste. NetBeans würde sich schwer tun, die richtige Methode zu finden.

  • static Value methodName();
    Diese Version sollte klar sein. Eine Methode, die ein Objekt zurück liefert. Die Methode muss selber bestimmen, wie das Objekt aussehen soll und bekommt aus der layer.xml keine Informationen mitgegeben.
  • static Value methodName(FileObject fo);
    Der Parameter fo ist das FileObject zum zugehörigen <file> Eintrag zu dem das Attribut definiert wurde.
  • static Value methodName(FileObject fo, String attrName);
    fo ist das besagte FileObject. attrName ist der Wert des name
    Attributes von <attr>. Was auch immer man damit machen will.
  • static Value methodName(Map attrs);
    Ist einem das noch nicht genug, gibt es den Parameter attrs. Dieser Enthält alle definierten Attribute des entsprechenden FileObjects. Auch das Attribut mit dem methodValue Eintrag selbst. Hier sollte unbedingt darauf geachtet werden, dass keine Endlosrekusion entsteht. Um das zu verhindern gibt es auch die Version:
  • static Value methodName(Map attrs, String attrName);
    Hier wird der eigene Attributname mitgegeben, so dass man beim durchlaufen der Map diesen Eintrag direkt überspringen kann.

Der Rückgabewert Value ist wie in der JavaDoc schon beschrieben durch die eigene gewünschte Klasse zu ersetzen. Welche dieser Versionen letztendlich gewählt wird hängt ganz vom eigenen Geschmack und dem jeweiligen Anwendungskontext ab.

One Response to Möglichkeiten für eine methodvalue Implemetierung

  1. Pingback: Leben im Dateisystem – die layer.xml von NetBeans |