Object statt konkreter Klasse: Unterschied zwischen den Versionen

Aus Programmieren-Wiki
Keine Bearbeitungszusammenfassung
Keine Bearbeitungszusammenfassung
 
(Eine dazwischenliegende Version von einem anderen Benutzer wird nicht angezeigt)
Zeile 1: Zeile 1:
{{Bewertungsrichtlinie
{{CategoryBlock
|baustelle=Ja
|Baustelle=Ja
|blatt=2
|Java Grundlagen=Nein
|beschreibung=Die Object Klasse liegt jeder Klasse und jedem Datentyp in Java zugrunde. Entsprechend könnten wir das auch ausnutzen um damit Funktionalitäten generisch zu gestalten.
|Organisation=Nein
|Programmierstil=Nein
|Bewertungsrichtlinie=Ja
|blattAnnotation=2
|blattAbzug=3
}}
{{Inhaltsblock
|vorher====Beschreibung===
Die Object-Klasse liegt jeder Klasse und jedem Datentyp in Java zugrunde. Entsprechend könnten wir das auch ausnutzen, um damit Funktionalitäten generisch zu gestalten.


Allerdings gilt immer, dass Datentypen so konkret wie möglich gewählt werden sollen. Dafür ist Object zu generisch.  
Allerdings gilt immer, dass Datentypen so allgemein wie möglich und konkret wie nötig gewählt werden sollen. Dafür ist Object zu generisch, da auf einem als Object-deklariertem Objekt keine nützlichen Methoden aufgerufen werden können, ohne das Objekt explizit zum benötigten Datentyp zu casten.  
Stattdessen bietet das JDK Generics, die dafür da sind, generische Strukturen aufzubauen, ohne dabei zu generisch zu werden.
Stattdessen bietet das JDK bspw. Generics, die dafür da sind, generische Strukturen aufzubauen, ohne dabei zu generisch zu werden.
|schweregrad=leicht
}}
|negativ=<syntaxhighlight lang="Java">
{{Inhaltsblock
public class Pair {
|color=red
|vorher=Negativbeispiel:
|Beispiel=public class Pair {
     private Object first;
     private Object first;
     private Object second;
     private Object second;
Zeile 32: Zeile 42:
     }
     }
}
}
</syntaxhighlight>
|beispielname=ObjectBad
|positiv=<syntaxhighlight lang="Java">
}}
public class Pair<T> {
{{Inhaltsblock
|color=green
|vorher=Positivbeispiel:
|Beispiel=public class Pair<T> {
     private T first;
     private T first;
     private T second;
     private T second;
Zeile 58: Zeile 71:
     }
     }
}
}
</syntaxhighlight>
|beispielname=ObjectGood
|weiterlesen=Nein
}}
}}

Aktuelle Version vom 14. Oktober 2025, 07:58 Uhr

🚧 Diese Seite befindet sich in Bearbeitung 🚧
🤓 Diese Seite ist eine Bewertungsrichtlinie, die ab Blatt 2 annotiert und ab Blatt 3 abgezogen wird. 🤓

Beschreibung

Die Object-Klasse liegt jeder Klasse und jedem Datentyp in Java zugrunde. Entsprechend könnten wir das auch ausnutzen, um damit Funktionalitäten generisch zu gestalten.

Allerdings gilt immer, dass Datentypen so allgemein wie möglich und konkret wie nötig gewählt werden sollen. Dafür ist Object zu generisch, da auf einem als Object-deklariertem Objekt keine nützlichen Methoden aufgerufen werden können, ohne das Objekt explizit zum benötigten Datentyp zu casten. Stattdessen bietet das JDK bspw. Generics, die dafür da sind, generische Strukturen aufzubauen, ohne dabei zu generisch zu werden.

Negativbeispiel:

public class Pair {
    private Object first;
    private Object second;
    public Pair(Object first, Object second) {
        this.first = first;
        this.second = second;
    }
    public Object getFirst() {
        return first;
    }
    public Object getSecond() {
        return second;
    }
}
 
public static void main(String [] args) {
    Date startTime = /* get start time*/
    Date endTime = /* get end time*/ 
    Pair timeSpan = new Pair(startTime, endTime);
    //some code ...
    if(((Date) timeSpan.getFirst()).before(now) && ((Date) timeSpan.getSecond()).before(now)) {
        System.out.println("Current time within timespan");
    }
}

Positivbeispiel:

public class Pair<T> {
    private T first;
    private T second;
    public Pair(T first, T second) {
        this.first = first;
        this.second = second;
    }
    public T getFirst() {
        return first;
    }
    public T getSecond() {
        return second;
    }
}
 
public static void main(String [] args) {
    Date startTime = /* get start time*/
    Date endTime = /* get end time*/ 
    Pair timeSpan = new Pair<Date>(startTime, endTime);
    //some code ...
    if(timeSpan.getFirst().before(now) && timeSpan.getSecond().before(now) {
        System.out.println("Current time within timespan");
    }
}