code vereinfachen

josfe1234

Mitglied
Hallo, ich bin neu hier und bräuchte Hilfe für meine Hausaufgabe im Studium.
Java:
public void readAndStoreTags() {
        Map<String, Object> tag_map = TagReader.readTags(getPathname());
        for(String key: tag_map.keySet()) {
            if(key.equals("author") && (tag_map.get(key)!=null)) author = ((String) tag_map.get(key)).trim();
            if(key.equals("album") && (tag_map.get(key)!=null)) album = ((String) tag_map.get(key)).trim();
            if(key.equals("duration") && (tag_map.get(key)!=null)) {
                duration = (long) tag_map.get(key);
            }
            if(key.equals("title") && (tag_map.get(key)!=null)) title = ((String) tag_map.get(key)).trim();
        }
    }

Das oben ist mein Code wobei die Antwort dann vom Prof kam:

viel einfacher ist es in readAndStoreTags, nicht das gesamte tag_map in einer Schleife durchzugehen, sondern nur gezielt tag_map.get("title") usw. zu holen.
gesagt und getan hab ich das umgeschrieben in das:


Java:
    public void readAndStoreTags(String pathname) {
        Map<String, Object> tag_map = TagReader.readTags(pathname);
        System.out.println(tag_map.get("title"));
       

            if (tag_map.get("title") != null) {
                super.title = ((String) tag_map.get("title")).trim();
            }

            if (tag_map.get("author") != null) {
                super.author = ((String) tag_map.get("author")).trim();
            }

            if (tag_map.get("album") != null) {
                this.album = ((String) tag_map.get("album")).trim();
            }

            if (tag_map.get("duration") != null) {
                this.duration = (long) tag_map.get("duration");
            }
        }

jedoch kommen jetzt andere Fehler auf

wär cool wenn mir einer helfen könnte
 
Zuletzt bearbeitet:
links oben hast du </> als symbol da gehört code rein dann wäre es einfaher zu lesen

<String , Object> sagt viel aus ...was sollte den überhuapt gemacht werden und was steht in den Objekten überhaupt drin das shcnipsel ist zu kurz
 
also zuerst <String , Object> ist ein generic dh man will objekt sicher einsetzen also nichts falsches...
ein generic mit Object drin hat ne auswirkung von 0 .. mach halt <String, Buch> oder sonst was nachdem du suchst dann kannst du dir schon mal das casten sparen
 
also ist das oben doch verkehrt? 😅
es funktioniert ja anscheinend aber deine generics macht keinen sinn


und das casten ist eig ne katastrophe...du kannst alleine in den 4 zeilen in 4 exceptions rein laufen was jetzt an sich schon leicht ungünstig is 😁


und es wird keine abgefangen was zum absturz des programms führt ..also ein user wird da relativ schnell zum weinen anfangen xD
 
Nein, wenn eben beliebige Objekte drin liegen können, klappt nur das.

Map<String, Object> lässt sich nicht gleichwertig ersetzen durch Map oder Map<String, ?>.
dann kann ich doch die generics doch gleich weglasen oder nicht

bzw es ist die Sinnahftigkeit anzuzweifeln "ein string mit irgendwas ergibt XYZ" das kann man sicher schöner machen und wenigstens die objekte eingrenzen was denn rein darf
 
dann kann ich doch die generics doch gleich weglasen oder nicht
Nein, ohne Typ-Angaben ist nur benutzbar wie es eine Map<Object, Object> und außerdem ein Raw Rype, das kann zu unerwarteten Fehlern führen.

bzw es ist die Sinnahftigkeit anzuzweifeln "ein string mit irgendwas ergibt XYZ" das kann man sicher schöner machen und wenigstens die objekte eingrenzen was denn rein darf
Wenn sowohl String als auch Number erlaubt sein sollen, ist nur Object als gemeinsamer Super-Typ nutzbar.

Mit neueren Java-Versionen ist das auch relativ sauber nutzbar:
Java:
if (tag_map.get("title") instanceof String title) {
    super.title = title.trim();
}
 
Nein, ohne Typ-Angaben ist nur benutzbar wie es eine Map<Object, Object> und außerdem ein Raw Rype, das kann zu unerwarteten Fehlern führen.


Wenn sowohl String als auch Number erlaubt sein sollen, ist nur Object als gemeinsamer Super-Typ nutzbar.

Mit neueren Java-Versionen ist das auch relativ sauber nutzbar:
Java:
if (tag_map.get("title") instanceof String title) {
    super.title = title.trim();
}
ok sehr interessant

nun halt die Frage ob das denn zutrifft auf den TE
 

Zurück
Oben