Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: Tode am 23.03.12 - 14:55:08

Titel: Herausfinden, ob ein Objekt eine bestimmte Methode / Property hat...
Beitrag von: Tode am 23.03.12 - 14:55:08
Folgendes Szenario: Ich habe eine Funktion, in die alles mögliche übergeben werden kann... Jetzt möchte ich herausfinden, ob das, was da übergeben wurde, eine bestimmte Property oder Methode hat (in Java hat ja beispielsweise fast jede Klasse eine toString()- Methode, aber in LotusScript sind wir da ja noch nicht so weit)... Gibt es eine Möglichkeit, das abzufragen?

Also ob eine übergebene Variable überhaupt ein Objekt ist, kriege ich ja mit IsObject( myObject ) raus.
Ob das Objekt dann zu einer mir bekannten Klasse gehört kann ich ja über myObject isA "NotesDocument" abfragen...
Was mache ich aber, wenn ich keine Ahnung habe, was ich da habe... und wissen will, ob das Ding z.B. eine Property "Title" hat, oder eine Property "Text" o.ä...

Jemand ne Idee für mich?
Titel: Re: Herausfinden, ob ein Objekt eine bestimmte Methode / Property hat...
Beitrag von: umi am 23.03.12 - 15:11:45
Hallo
Evtl. mit einem Error Handler und dann testen ob ein Aufruf object.Titel einen Fehler liefert ?
Titel: Re: Herausfinden, ob ein Objekt eine bestimmte Methode / Property hat...
Beitrag von: Tode am 23.03.12 - 15:39:28
Ja, das wäre meine Fallback- Lösung... Aber geht das nicht eleganter?
Titel: Re: Herausfinden, ob ein Objekt eine bestimmte Methode / Property hat...
Beitrag von: pram am 24.03.12 - 00:07:58
Du könntest das Interface Konzept wie in Java verfolgen:

jedes Objekt hat eine .implements(interfaceName) Methode, darüber kann das Objekt "gefragt" werden
ob ein bestimmtes Interface implementiert ist. Sagt es "ja", so muss es auch alle im Interface bereit gestellten Methoden implementieren.

Code
If objA.implements("Comparable") and objB.implements("Comparable") then
     objA.compareTo(objB)
end if

Mag anfangs ein wenig umständlich aussehen, man kann das Ganze aber noch etwas ausbauen, so dass es typsicher wird und Fehler sehr schnell zur Compilezeit auffallen (z.B. falsche Parameteranzahl).

Werbung: Wir verwenden das so in unserem Framework: http://www.foconis-object-framework.de kannst du dir ja mal ansehen.

Ansonsten bleibt dir wohl nur der von Umi vorgeschlagene Errorhandler.

Werkzeuge wie Reflection sind soweit ich weiß in LS nicht möglich (obwohl es der Debugger z.B. kann)

Gruß
Roland
Wie man das sogar noch einigermaßen Typsicher hinbekommt, dass Fehler zur Compilezeit
Titel: Re: Herausfinden, ob ein Objekt eine bestimmte Methode / Property hat...
Beitrag von: Tode am 24.03.12 - 07:07:26
Das klingt sehr interessant aber auch sehr aufwändig... Aber wenns um Erweiterbarkeit/Flexibilität geht, ist das sicherlich der richtige Weg. konkret geht es mir in meinem Fall darum, jedes beliebige Objekt im Bedarfsfall in ein Log dumpen zu können. Also Quasi die Ansicht im Debugger reduziert auf das, was mir wesentlich erscheint, in einem (error)- Log anzuzeigen für Code, der sich nicht debuggen lässt. Da muss ich halt die eingebauten Klassen abbilden (was nicht schwer aber halt auswändig ist) und mir dann für eigene Klassen was ausdenken. Bisher habe ich das immer manuell gemacht, aber ein Framework wäre natürlich nicht schlecht... Na, dann schau ich mir den Link mal an...