Domino 9 und frühere Versionen > Entwicklung

Fehlerbehandlung bei Konstruktoren

(1/2) > >>

oz:
Hallo Forum,

Ich habe eine Klasse in LotusScript.
Die Klasse hat einen Konstruktor.
Zusätzlich hat die Klasse selbstverständlich einige Methoden.

Public Class MeineKlasse
Sub New()
....Hier tut der Konstruktor etwas, was auch schief gehen kann.
End Sub
End Class

Folgendes Problem stellt sich mir:
Im Konstruktor passieren Dinge, die auch schief gehen können. In diesem Fehlerfall würd ich mir wünschen, daß die Klasse "Nothing" ist.

Dim meineKlasse As New MeineKlasse

Im Fehlerfall müßte also die Variable meineKlasse "Nothing" sein, also

If meineKlasse Is Nothing Then
   Exit....
Else
   meineKlasse.methode1
End If

Somit würden keine Methoden an einer "NULL" instanz einer Klasse aufgerufen.
Wie kann ich das Errorhandling im Konstruktor machen? Kann ich eine Klasse im Konstruktor "Nothing" setzen?

Vielen Dank für Eure Hilfe

Gruß
Oz

koehlerbv:
Mittels der Delete-Anweisung kannst Du ein bereits erzeugtes Objekt wieder in den Orkus befördern. Eigentlich sollte das also tun, was Du erreichen willst.

HTH,
Bernhard

flaite:
Hier stehen sehr interessante Informationen zu Errorhandling allgemein drin:
http://www-128.ibm.com/developerworks/lotus/library/ls-DebugLS2/

Dieser Code.

--- Code: ---Sub New

    On Error Goto Repeater   
     ' put the rest of your code here.   
     Exit Sub ' or Exit Function if this were a function
     
Repeater:

    Error Err, Error & {
   
//} & Getthreadinfo(1) & {:} & Erl

    ' 1 = LSI_THREAD_PROC
   
End Sub
--- Ende Code ---

Du kannst mal versuchen. Statt Repeater new. Das Objekt wird ja irgendwo initialisiert und da kannst du das dann abfangen.
Es gilt übrigens als schlechte Praxis zu viel Funktionalität in den Constructor zu packen. Falls umfangreichere und riskantere Initialisierungen gefragt sind, erstelle ich immer eine zweite Methode init(). Da kannst du diese Art des Error-Handlings natürlich auch einbauen.

Gruß Axel

koehlerbv:
Axel, ich glaube, Kollege S. aus G. bei M. hat sich etwas missverständlich ausgedrückt. Er will eventuelle Errors so handeln, dass ein eventuell schon aufgebautes Object dann wieder vernichtet wird und andere Routinen somit dieses Object auf "Nothing" überprüfen können.

Bernhard

animate:
Ich habe auch nicht so ganz verstanden, auf was Axel hinauswill, aber es hat mich auf die Frage gebracht, was man am Besten tut, wenn in der Sub New irgendwas schief geht.

Lösche ich mein Objekt dann wieder mit dem von Bernhard genannten
Delete Me

oder

erzeuge ich einen Fehler mit Error und fange diesen Fehler dort ab, wo ich das Objekt erzeuge?

Ich persönlich halte generell die zweite Alternative für geschickter weil es evtl. ja sein könnte, dass es mehrere Punkte gibt, die schief gehen können.
Bei der ersten Lösung weiß der Aufrufer nur, es ist was schief gegangen, bei der zweiten weiß er auch was und kann ggf. Gegenmaßnahmen einleiten.

Navigation

[0] Themen-Index

[#] Nächste Seite

Zur normalen Ansicht wechseln