Kontrollstrukturen aufräumen

Status
Nicht offen für weitere Antworten.

pktm

Mitglied
Hallo!

Ich suche ein paar Vorschläge, wie man meinen Code etwas übersichtlicher / ordentlicher gestalten könnte.
Die Siuation ist folgende: Es geht darum, aus einer Liste mit Objekten jene heraus zu filtern, die bestimmte eigenschaften erfüllen. Die Objekte, die da in einer Liste stehen kommen aus einer externen API.

Nu haben diese Objekte spezifische EIgenschafte, die ich mittels Funktionen in Variablen einlese:
Code:
            String hasTag = this.getSpecificDataPropertyValue("hasTag", props);
            String hasTier = this.getSpecificDataPropertyValue("hasTier", props);
            String contains = this.getSpecificDataPropertyValue("contains", props);
            String startsWith = this.getSpecificDataPropertyValue("startsWith", props);
            String endsWith = this.getSpecificDataPropertyValue("endsWith", props);

props ist eine HashMap mit komplexen nicht einfach mal eben abzufragenden Objekten als Schlüssel (sonst könnte man ja einfach damit arbeiten -.-), und Mengen von komplexen Objekten als Werte. Deswegen habe ich mir eine Methode geschrieben, die diese HashMap beackert und mir zu einem Key den ich als String spezifiziere den passenden Wert heraus sucht.

Soweit so gut, jetzt gibt es eine Reihe von solchen Eigenschaften, die in einer gewissen Abhängigkeit stehen:
Code:
if (hasTier != null && (hasTag != null || contains != null || startsWith != null || endsWith != null )) {...}

Und je nach dem, welcher dieser Werte nicht null ist (Reihenfolge ist egal), soll daraus ein anderes Objekt erstellt werden. Und genau das finde ich nun wirklich nciht schön:
Code:
        ResultLeaf rl = null;
        if( hasTag != null ) {
            rl = new ResultLeaf(hasTier, hasTag);
        }else if( contains != null ) {
            rl = new ResultLeaf(hasTier, contains);
        }else if( startsWith != null ) {
            rl = new ResultLeaf(hasTier, startsWith);
        }else if( endsWith != null ) {
            rl = new ResultLeaf(hasTier, endsWith);
        }

        result.add(rl); // etwas mit dem Objekt machen

Nun die Frage an euch, ob jemand Vorschläge hat, wie man das besser machen könnte.
Hier das Desaster mal in voller Größe:
Code:
            Map props = reasoner.getDataPropertyRelationships(owl_individual);

            String hasTag = this.getSpecificDataPropertyValue("hasTag", props);
            String hasTier = this.getSpecificDataPropertyValue("hasTier", props);
            String contains = this.getSpecificDataPropertyValue("contains", props);
            String startsWith = this.getSpecificDataPropertyValue("startsWith", props);
            String endsWith = this.getSpecificDataPropertyValue("endsWith", props);

            if (hasTier != null && (hasTag != null || contains != null || startsWith != null || endsWith != null )) {
        ResultLeaf rl = null;
        if( hasTag != null ) {
            rl = new ResultLeaf(hasTier, hasTag);
        }else if( contains != null ) {
            rl = new ResultLeaf(hasTier, contains);
        }else if( startsWith != null ) {
            rl = new ResultLeaf(hasTier, startsWith);
        }else if( endsWith != null ) {
            rl = new ResultLeaf(hasTier, endsWith);
        }
            }

Grüße, pktm
 
G

Guest

Gast
Sowas?
Code:
Map props = reasoner.getDataPropertyRelationships(owl_individual);
ResultLeaf rl = new ResultLeaf(props);
 

didjitalist

Bekanntes Mitglied
Sieht doch völlig OK aus. Zeile 10 kann auf "if (hasTier != null ) {" zusammengestrichen werden. Und wenn 'rl' nicht zwischen Zeile 20 und 21 noch verwendet wird, streich auch gleich Zeile 11 und alle Zuweisungen.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen

Neue Themen


Oben