Zum Inhalt springen

reguläre Ausdrücke


Vafe

Empfohlene Beiträge

Ich hätte gerne einen regulären Ausdruck, der mir in einer Source-Datei alle Stellen liefert, in denen in einer Zeile mehr als eine Referenz verwendet wird.

Beispiel: theBeispielIdent = theBeispiel.getBeispiel().getBeispielIdent();

Der Hintergrund ist der, das bei einer Nullpointer-Exception in Java nur die Zeile angegeben wird, was bei obiger Zeile immer noch zwei Möglichkeiten offen lassen würde. Diese Stellen möchte ich in Zukunft abschaffen bzw. absichern.

Kann mir irgendwer helfen??

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Hintergrund ist der, das bei einer Nullpointer-Exception in Java nur die Zeile angegeben wird, was bei obiger Zeile immer noch zwei Möglichkeiten offen lassen würde. Diese Stellen möchte ich in Zukunft abschaffen bzw. absichern.

Äh... Und dabei soll eine RegExp helfen?

Wie soll die denn feststellen, welcher Methodenaufruf die Nullpointer-Exception warf?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Original geschrieben von frquadrat

Äh... Und dabei soll eine RegExp helfen?

Wie soll die denn feststellen, welcher Methodenaufruf die Nullpointer-Exception warf?

Nein hilft natürlich nicht beim rausfinden, welche methode die exception geworfen hat, aber ich würde dann alle diese Stellen ändern, so dass es auf zwei zeilen liegt, aber ich will halt nicht den ganzen code per hand durchsehen um die stellen zu finden...

etwas logischer ?? ;-)

Link zu diesem Kommentar
Auf anderen Seiten teilen

Servus,

also Du wirst nicht drumrumkommen, dass Du alle Zeilen von Hand durchgehst und schaust, was schief läuft.

Normalerweise schreibt man doch auch den Code erstmal etwas ausführlicher, und wenn er fehlerfrei läuft, kann man ihn evtl. kürzen, indem man mehrere Aufrufe (mit Casting) in einer Zeile schreibt.

Welche IDE nutzt Du denn? Dann könntest Du ja einfach mal debuggen und jeweils in die Methode reingehen und dort schauen, in welcher Methode die NullPointerException geworfen wird.

Handelt es sich um viele solche Stellen? Wenn ja, sind das verschiedene Szenarien oder immer derselbe Ablauf. Bei dem selben Ablauf solltest Du evtl. Dein Design nochmal überdenken, bei vielen verschiedenen Deine Testläufe.

Peter

Link zu diesem Kommentar
Auf anderen Seiten teilen

Der Hintergrund ist der, das bei einer Nullpointer-Exception in Java nur die Zeile angegeben wird, was bei obiger Zeile immer noch zwei Möglichkeiten offen lassen würde. Diese Stellen möchte ich in Zukunft abschaffen bzw. absichern.
Naja mal ganz vom Thema Regex weg, ist das schlechter Stil.

Du solltest nicht versuchen solche - für dich - potentiellen Probleme zu vermeiden sondern besser versuchen das Problem selber anzugehen.

Wenn eine NullPointerException geworfen wird, bekommst du immer einen Stacktrace mitgeliefert. Verwende eine gute IDE mit Debugger (Eclipse bietet sich z.B. an dafür) und sieh dir den Inhalt der Variablen selber an - einmal damit angefangen, wirst du es nie wieder anders machen wollen.

Stell die mal vor, du hast eine Situation, wo ein Methodenaufruf wie dieser hier erscheint:


Object o = a.b().c().d().e.f.g();

Das jetzt jedesmal aufzuschlüsseln in aufzuschlüsseln

B b = a.b();

C c = b.c();

D d = c.d();

E e = d.e;

F f = e.f;

G g = f.g();

kann immer und immer wieder angewendet zu ziemlich unübersichtlichem Code führen. Hier solltest du lieber hingehen und beim Design eingrenzen wo eine NPE geworfen werden könnte, und diese dann explizit umgehen:
D d = a.b().c().d();

if(d == null) {


  // Jetzt irgendwas machen und auf den null-Zustand reagieren

  System.err.println("d ist null!");


} else {

  Object o = d.e.f.g();

}

Christian

Link zu diesem Kommentar
Auf anderen Seiten teilen

  • 2 Wochen später...

OK, also ich versuche das ganze problem noch etwas mehr einzugrenzen:

1. es handelt sich um den Code des Projekts aus der Firma wo ich arbeite, sprich es ist nur ein ganz kleiner Teil eines sehr großen Projekts! Das heißt, dass dort viele Methoden verwendet werden, auf deren Inhalt ich keinen Einfluss habe, bzw. Methoden die Datenbankinhalte zurück geben.

2. Klar könnte ich das Debuggen, aber das ist etwas komplizierter, denn jedes mal wo ich debugge, können viele andere auf der Testumgebung nicht weiter testen, das will ich verhindern!! Deshalb die benötigte explizite Zeilenangabe, denn meistens brauche ich nur auf den Methodenaufruf einmal raufschauen und sehe schon was Null ist (90% der Fälle).

3. will ich nicht jede Stelle absichern (viel zu viel Code!)! Es sind nicht so viele Stellen dabei, wo das überhaupt möglich ist(Exceptions werden auch in den Methoden abgefangen!).

4. ich nutze IntelliJ.

klarer??

Link zu diesem Kommentar
Auf anderen Seiten teilen

3. will ich nicht jede Stelle absichern (viel zu viel Code!)! Es sind nicht so viele Stellen dabei, wo das überhaupt möglich ist(Exceptions werden auch in den Methoden abgefangen!).

Zuviel Code? Was ist denn das für eine Begründung? Wie willst du auf diese Art und Weise denn jemals zu einem stabilen Programm kommen? Wenn du jedes Mal erst die Exception selber analysieren musst bist du in Monaten/Jahren noch am Bugfixen, weil du nie genau weisst, in welcher Situation der Fehler jetzt genau auftritt. Klar kannst du auf deine Art und Weise die Fehler eingrenzen, aber du wirst immer am Hinterherprogrammieren sein. Auch wenn's einmal mehr Arbeit und mehr Code ist: Sichere dich lieber im Vorhinein ab, anstatt hinterher um die einzelnen Fehler drumrumzuprogrammieren.

Christian

Link zu diesem Kommentar
Auf anderen Seiten teilen

alles klar, dann werd ich wohl an dieser stelle aufgeben...

es hätte lediglich gereicht, wenn mir jemand gesagt hätte wie ein solcher ausdruck aussehen könnte, denn es hat schon seinen grund dass ich das brauche...

aber scheinbar weiß das niemand...

trotzdem danke für die vielen gut gemeinten ratschläge!!

Vanessa

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...