Objekte erzeugen Httprequest oder Httpclient

Wave

Mitglied
In Java sind die Klassen Httprequest oder Httpclient als abstrakt definiert.
In der Schule haben wir nun gelernt dass von abstrakten Klassen keine Objekte erzeugt werden können.
In der Doku steht bei Httprequest oder Httpclient dennoch ein Konstruktor oder eine "Builder" Methode. Mit der Builder-Methode (z. B. newBuilder(uri:Uri) bei Httprequest) kann man doch Objekte erzeugen? Habe ich das richtig verstanden? Sorgt ein Builder dafür, dass man dennoch in einer abstrakten Klasse ein Objekt erzeugen kann?
WIr haben auch die Schnittstellen Httprequest.Builder und Httprespons<String> verwendet.
Wir machen gerade Client-Server-Prinzip.
 

Robert Zenz

Top Contributor
In der Doku steht bei Httprequest oder Httpclient dennoch ein Konstruktor oder eine "Builder" Methode. Mit der Builder-Methode (z. B. newBuilder(uri:Uri) bei Httprequest) kann man doch Objekte erzeugen?
Ja.

Habe ich das richtig verstanden?
Ja.

Sorgt ein Builder dafür, dass man dennoch in einer abstrakten Klasse ein Objekt erzeugen kann?
Nein, du bekommst eine konkrete Implementierung/Erweiterung der abstrakten Klasse. Die tatsaechliche Klasse der Instanz welche du da bekommst geht dich aber nichts an. Zum Beispiel:

Java:
public static final AbstractSomething newInstance() {
    return new ConcreteClassExtendingAbstractSomething();
}

Es geht darum dass du von der konkreten Klasse entkoppelt bist, weil dann kann der Builder naemlich auch in der naechsten Version eine andere konkrete Klasse retournieren und dein Code und Program funktioniert weiterhin. Siehe Fabrikmethoden.

Oder in bekannten Klassen:

Java:
public static final List createNewList() {
    return new ArrayList<>();
}
 

KonradN

Super-Moderator
Mitarbeiter
Also erst einmal zum Verständnis: Natürlich kann auch eine abstrakte Klasse einen Konstruktor haben. Eine abstrakte Klasse kann ja Dinge enthalten, die initialisiert werden müssen und dazu dient u.a. ein Konstruktor.

Und ja - du kannst von einer abstrakten Klasse keine neue Instanz anlegen. Du brauchst eine neue Klasse, die von der abstrakten Klasse erbt und die dann alle abstrakten Elemente implementiert.

Wenn Du nun einen Builder hast, dann gilt das natürlich auch für diesen. Das kann man auch an den Sourcen sehr gut nachvollziehen. Schauen wir erst einmal HttpRequest.java an:

Da siehst Du dann, dass bei newBuilder die Klasse jdk.internal.net.http.HttpRequestBuilderImpl verwendet wird.

Und diesen Builder kann man sich dann auch einmal ansehen:

Und da die Methode build() ja den HttpRequest zurück gibt, nehmen wir direkt diese Methode:
Java:
    @Override
    public HttpRequest build() {
        if (uri == null)
            throw new IllegalStateException("uri is null");
        assert method != null;
        return new ImmutableHttpRequest(this);
    }

Somit gibt es eine Klasse ImmutableHttpRequest, die von HttpRequest erben muss (sonst wäre die Rückgabe nicht erlaubt).


Falls dieses "in den Sourcen nachsehen" für Dich noch zu viel ist, dann kannst Du das prinzipiell auch selbst prüfen. Dazu schreibst Du einfach etwas Code, das einen HttpRequest erzeugt. Und dann kannst Du Dir am Ende die Details des HttpRequests anzeigen lassen. Das wäre dann etwas wie:
Java:
        HttpRequest request = HttpRequest.newBuilder()
                .GET()
                .uri(new URI("https://localhost:8080"))
                .build();
        System.out.println(request.getClass().getName());

Das gibt Dir dann auch aus, was für eine Klasse es ist und hier ist es dann - wie erwartet - jdk.internal.net.http.ImmutableHttpRequest

Natürlich kann man auch noch weitere Dinge prüfen, z.B. die Superklasse. Was Du alles aus einer Klasse auslesen kannst, findest Du in der Beschreibung der Klasse Class.:
System.out.println(request.getClass().getSuperclass().getName());
Und da kommt dann - wieder wie erwartet - heraus: java.net.http.HttpRequest
 

bullish

Mitglied
In Java sind die Klassen Httprequest oder Httpclient als abstrakt definiert.
In der Schule haben wir nun gelernt dass von abstrakten Klassen keine Objekte erzeugt werden können.
In der Doku steht bei Httprequest oder Httpclient dennoch ein Konstruktor oder eine "Builder" Methode. Mit der Builder-Methode (z. B. newBuilder(uri:Uri) bei Httprequest) kann man doch Objekte erzeugen? Habe ich das richtig verstanden? Sorgt ein Builder dafür, dass man dennoch in einer abstrakten Klasse ein Objekt erzeugen kann?
WIr haben auch die Schnittstellen Httprequest.Builder und Httprespons<String> verwendet.
Wir machen gerade Client-Server-Prinzip.
Abstrakte Klassen kannst du nicht erzeugen, aber du kannst eine von einer abstrakten Klasse abgeleiteten Klasse erzeugen.

Anonyme Klassen (Klassen ohne Namen) sind auch eine abgeleitete Klasse , deshalb geht zum Beispiel:

Java:
TableModel m = new AbstractTableModel() {
    //hier die weitere Implementierung ... der abtrakten Methoden
};

auch.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
E Rekursiv Objekte erzeugen - geht das? Java Basics - Anfänger-Themen 2
F Aus eingelesener Datei korrekt Objekte erzeugen Java Basics - Anfänger-Themen 5
B Automatisch Objekte erzeugen mit verschiedenen Namen Java Basics - Anfänger-Themen 4
M Objekte mit einer Schleife mehrmals erzeugen Java Basics - Anfänger-Themen 17
R Objekte zur Laufzeit in Schleife erzeugen und in ArrayList ablegen Java Basics - Anfänger-Themen 4
S Objekte "gegebenfalls" erzeugen Java Basics - Anfänger-Themen 5
P Input/Output Objekte per Eingabe erzeugen Java Basics - Anfänger-Themen 1
D Erste Schritte Dynamisch Objekte erzeugen und diese durchsuchen Java Basics - Anfänger-Themen 7
J Objekte zur Laufzeit erzeugen und direkt verwenden Java Basics - Anfänger-Themen 9
A OOP Objekte per Schleife erzeugen Java Basics - Anfänger-Themen 1
M Erzeugen beliebig vieler Objekte, aber wie wechselnde Bezeichner? Java Basics - Anfänger-Themen 5
W Objekte erzeugen Java Basics - Anfänger-Themen 2
Joew0815 Interface JSON Objekte aus Java Objekten erzeugen Java Basics - Anfänger-Themen 9
B OOP Objekte erzeugen mit Hilfe einer for Schleife Java Basics - Anfänger-Themen 29
X Mehrere Objekte erzeugen Java Basics - Anfänger-Themen 8
C Methoden Objekte mit Hilfe einer Schleife in einer ArrayList erzeugen Java Basics - Anfänger-Themen 26
M Interface Interface Objekte erzeugen Java Basics - Anfänger-Themen 11
S OOP Objekte automatisch erzeugen Java Basics - Anfänger-Themen 13
P OOP 100 objekte erzeugen Java Basics - Anfänger-Themen 20
S Mehrere Objekte einer Klasse automatisch erzeugen Java Basics - Anfänger-Themen 15
H Objekte dynamisch erzeugen? Java Basics - Anfänger-Themen 6
B Objekte aus einer anderen Klasse(in der sich weitere Klassen befinden) erzeugen Java Basics - Anfänger-Themen 24
K in Konstruktor neue Objekte einer anderen Klasse erzeugen Java Basics - Anfänger-Themen 9
H Objekte erzeugen Java Basics - Anfänger-Themen 16
K Hauptklasse und Nebenklasse Objekte erzeugen Java Basics - Anfänger-Themen 8
T OOP Objekte erzeugen und in einem Array ausgeben. Java Basics - Anfänger-Themen 2
D Objekte auf Knopfdruck in Arraylist erzeugen Java Basics - Anfänger-Themen 2
J Datensätze aus einer DB als Objekte erzeugen und in ArrayList abspeichern Java Basics - Anfänger-Themen 9
H static/this/verschieden Objekte erzeugen Java Basics - Anfänger-Themen 8
L Mit Array neue Objekte erzeugen Java Basics - Anfänger-Themen 3
A [gelöst]Objekte in einer Schleife erzeugen Java Basics - Anfänger-Themen 9
S Objekte in Methode erzeugen Java Basics - Anfänger-Themen 3
D Mit Methode Objekte der Unterklasse erzeugen Java Basics - Anfänger-Themen 15
A Neue Objekte zur Laufzeit erzeugen Java Basics - Anfänger-Themen 5
W Viele Objekte mit einem Konstrukor erzeugen Java Basics - Anfänger-Themen 10
J Bei Vererbung Objekte erzeugen Java Basics - Anfänger-Themen 6
C StackOverflow Error, objekte öfters erzeugen Java Basics - Anfänger-Themen 6
J In For-Schleife mehrere Objekte erzeugen Java Basics - Anfänger-Themen 5
Z Objekte dynamisch erzeugen Java Basics - Anfänger-Themen 19
J viele Objekte erzeugen Java Basics - Anfänger-Themen 21
S Objekte mit laufender Nummer erzeugen Java Basics - Anfänger-Themen 3
D Objekte mit eindeutiger ID erzeugen und drauf zugreifen Java Basics - Anfänger-Themen 13
B Wie kann ich in einer Schleife Objekte erzeugen? Java Basics - Anfänger-Themen 5
G Objekte in einer Schleife erzeugen Java Basics - Anfänger-Themen 2
D Initialisierung von Klassen-Objekte Java Basics - Anfänger-Themen 47
richis-fragen Kann Arrays.stream() auch auf Objekte angewant werden? Java Basics - Anfänger-Themen 10
krgewb Über Objekt, das Objekte desselben Typs enthält iterieren Java Basics - Anfänger-Themen 5
I Zapier -> wie werden Objekte gespeichert? Java Basics - Anfänger-Themen 10
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
K Hab ich dass so richtig erklärt (Objekte und Referenzen)? Java Basics - Anfänger-Themen 5
J Objekte in JSON speichern?? Java Basics - Anfänger-Themen 1
I Objekte in ShareProject speichern um später zu nutzen Java Basics - Anfänger-Themen 4
J Objekte Java Basics - Anfänger-Themen 22
T Objekte mit arrays erstellen Java Basics - Anfänger-Themen 6
Hzrfa Objekte, Referenz Java Basics - Anfänger-Themen 5
T 3D Objekte verarbeiten Java Basics - Anfänger-Themen 2
N Welche Objekte kann man zu einem Set hinzufügen Java Basics - Anfänger-Themen 4
I XML einlesen und Objekte bekommen Java Basics - Anfänger-Themen 2
W Objekte einer ArrayList in txt-datei schreiben mit Paths? Java Basics - Anfänger-Themen 2
Encera Zugriff auf Map-Objekte Java Basics - Anfänger-Themen 3
E Objekte löschen Java Basics - Anfänger-Themen 9
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22
Encera Auf Objekte aus anderer Klassen zugreifen Java Basics - Anfänger-Themen 20
P Zähler Variable für mehrere Objekte Java Basics - Anfänger-Themen 6
B Objekte verschwinden beim Übersetzen Java Basics - Anfänger-Themen 5
D Zwei verschiedene Intellij Projekte, wie benutze ich wechselseitig objekte Java Basics - Anfänger-Themen 8
T Collections Sind Subklassen-Objekte in Listen mit Generics erlaubt? Java Basics - Anfänger-Themen 16
G Übergeordnete Objekte abrufen Java Basics - Anfänger-Themen 9
B Bin komplett am verzweifeln :( Verkettete Liste die Objekte hat Attribut auslesen Java Basics - Anfänger-Themen 14
A Objekte mit Parametern in eine Liste packen Java Basics - Anfänger-Themen 19
B Objekte, bspw. konkret Arraylists,manuell aus Speicher löschen? Java Basics - Anfänger-Themen 70
S Objekte von zwei klassen in zwei verschiedene Textdateien schreiben Java Basics - Anfänger-Themen 5
D Wie Objekte im JFrame frei bewegen lassen? Java Basics - Anfänger-Themen 3
Spandeli8 Erzeugte Objekte gegenüber Bildern hervorheben in Java Processing Java Basics - Anfänger-Themen 1
J Zwei Objekte vergleichen Java Basics - Anfänger-Themen 8
L Werte von Objekte addieren Java Basics - Anfänger-Themen 14
U Objekte in LinkedList löschen und editieren Java Basics - Anfänger-Themen 14
W Objekte über Scanner Input; ToString Probleme... Java Basics - Anfänger-Themen 4
J Problem mit einer Methode, die beliebig viele Objekte in Array speichern soll Java Basics - Anfänger-Themen 6
G Methoden Informationen aus zwei Objekte bekommen? Java Basics - Anfänger-Themen 6
P Globale Objekte Java Basics - Anfänger-Themen 2
C Nachträglich neue grafische Objekte hinzufügen Java Basics - Anfänger-Themen 7
D Interaktion zweier Objekte Java Basics - Anfänger-Themen 5
M Objekte in Array speichern und ausgeben Java Basics - Anfänger-Themen 17
S Objekte indiziert erstellen Java Basics - Anfänger-Themen 27
M Warum dürfen Objekte einer Klasse auf statische Variablen dieser Klasse referenzieren? Java Basics - Anfänger-Themen 10
M Objekte mittels equals vergleichen Java Basics - Anfänger-Themen 14
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
N Typebound Objekte einer Arraylist hinzufügen Java Basics - Anfänger-Themen 7
A (Objekte Java Basics - Anfänger-Themen 6
Y Klassen Klassen und Objekte Java Basics - Anfänger-Themen 3
Y Klassen Klassen und Objekte mit set und get Java Basics - Anfänger-Themen 0
U Objekte in einer LinkedList sortieren Java Basics - Anfänger-Themen 5
N Methode um Objekte einer Liste hinzuzufügen Java Basics - Anfänger-Themen 1
G Java Objekte auf Duplikate testen Java Basics - Anfänger-Themen 4
B Neue Liste erstellen, wenn Objekte bestimmte Referenz hat / Gruppierung von Einträgen Java Basics - Anfänger-Themen 12
M Implementieren einer Datenstruktur, welche nur 5 Objekte speichert Java Basics - Anfänger-Themen 3
M Objekte miteinander vergleichen Java Basics - Anfänger-Themen 18
C Verschiedene Objekte in einer Liste speichern Java Basics - Anfänger-Themen 6
J Java GUI- Objekte Position per Quelltext bestimmen Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben