Generische Konstruktor

Hieu

Aktives Mitglied
Hallo Leute,
und zwar hätte ich gerne 2 Konstruktor. Einmal einen um eine rechnung für einen Geschäftskunden zu erstellen und einmal einen Konstruktor um eine Rechnung für einen Privatkunden zu erstellen . Ich kann ja jetzt eine Rechnung so erstellen
Code:
Rechnung<Geschäftskunde> rechnung = new Rechnung<Geschäftskunde>();
die Frage ist wie sieht der der Konstruktor dazu aus weil würde gerne, dass immer wenn eine Rechnung für einen Geschäftskunden erstellt wird, dass dann auch der Zähler dazu sich um eins erhöht und das dann halt für den Privatkunden aus. Ich habe das jetzt
Code:
    public Rechnung<Privatkunde>(){
        anzahlrechnungenpri++;
    }
    
    public <Privatkunde> Rechnung(){
        anzahlrechnungenpri++;
    }
probiert aber keins der beiden Sachen hat funktioniert.


Hier nochmal der vollständige Code
Code:
public class Rechnung<T> {
    
    
    private String rechnungsnummer;
    private T kunde;
    private int anzahlgefahrenerkilometer;
    private boolean rechnungbezahlt;
    
    //Objektzähler
    public static int anzahlrechnungen = 0;
    public static int anzahlrechnungenpri = 0;
    public static int anzahlrechnungenge = 0;
    
    public Rechnung<Privatkunde>(){
        anzahlrechnungenpri++;
    }
    
    public <Privatkunde> Rechnung(){
        anzahlrechnungenpri++;
    }
 

Robat

Top Contributor
Die Rechnung muss mEn nicht wissen wie oft es sie gibt. Dazu solltest du eine Factory oder einen Service erstellen, welcher dir die entsprechenden Rechnungen erstellt und über die Anzahl der bereits vorhandenen Rechnungen bescheid weiß.
 

MoxxiManagarm

Top Contributor
Dein bisheriger Code zeigt ein Feld T kunde. Ich denke was du in der Aufgabe tun sollst ist Konstruktoren zu erstellen, welche dieses Feld direkt befüllen. (Es macht ja auch ehrlich keinen Sinn eine Rechnung ohne Kunden zu haben). Auf diese Weise klappt das auch mit dem Zählen.

Beispiel:
Java:
public class GenericCounter<T extends FooBar> {
    private static int countA = 0;
    private static int countB = 0;

    private T value;

    public GenericCounter(T value) {
        this.value = value;
        switch(value.getClass().getSimpleName()) {
            case "A": countA++; break;
            case "B": countB++; break;
        }
    }

    public static void main(String... args) {
        GenericCounter<A> a = new GenericCounter<>(new A());
        GenericCounter<B> b = new GenericCounter<>(new B());
    }
}

abstract class FooBar { }

class A extends FooBar { }

class B extends FooBar { }
 
Zuletzt bearbeitet:

MoxxiManagarm

Top Contributor
Bzw. nochmal ein problemnäheres Beispiel, weil ich vermute, dass es in die Richtung geht:

Java:
public class Rechnung<T extends Kunde> {
    private static int countKunde = 0;
    private static int countGeschaeftskunde = 0;
    private static int countPrivatekunde = 0;

    private String rechnungsnummer;
    private T value;

    public Rechnung(T value) {
        this.value = value;
        switch (value.getClass().getSimpleName()) {
            case "Kunde": rechnungsnummer = "K" + ++countKunde; break;
            case "Geschaeftskunde": rechnungsnummer = "G" + ++countGeschaeftskunde; break;
            case "Privatkunde": rechnungsnummer = "P" + ++countPrivatekunde; break;
        }
    }

    @Override
    public String toString() {
        return rechnungsnummer;
    }

    public static void main(String... args) {
        List<Rechnung> rechnungen = new ArrayList<>();

        rechnungen.add(new Rechnung<>(new Geschaeftskunde()));
        rechnungen.add(new Rechnung<>(new Geschaeftskunde()));
        rechnungen.add(new Rechnung<>(new Privatkunde()));
        rechnungen.add(new Rechnung<>(new Privatkunde()));
        rechnungen.add(new Rechnung<>(new Kunde()));
        rechnungen.add(new Rechnung<>(new Privatkunde()));

        System.out.println(rechnungen); // prints [G1, G2, P1, P2, K1, P3]
    }
}

class Kunde { }
class Geschaeftskunde extends Kunde { }
class Privatkunde extends Kunde { }
 

fhoffmann

Top Contributor
public class Rechnung<T extends Kunde> {
Ich verstehe an dem Beispiel nicht, weshalb du hier überhaupt eine generische Klasse benötigst.
Es funktioniert doch auch so (ich habe hier im Wesentlichen T durch Kunde ersetzt):
Java:
public class Rechnung {
    private static int countKunde = 0;
    private static int countGeschaeftskunde = 0;
    private static int countPrivatekunde = 0;

    private String rechnungsnummer;
    private Kunde kunde;

    public Rechnung(Kunde kunde) {
        this.kunde = kunde;
        switch (kunde.getClass().getSimpleName()) {
            case "Kunde": rechnungsnummer = "K" + ++countKunde; break;
            case "Geschaeftskunde": rechnungsnummer = "G" + ++countGeschaeftskunde; break;
            case "Privatkunde": rechnungsnummer = "P" + ++countPrivatekunde; break;
        }
    }

    @Override
    public String toString() {
        return rechnungsnummer;
    }

    public static void main(String... args) {
        java.util.List<Rechnung> rechnungen = new java.util.ArrayList<>();

        rechnungen.add(new Rechnung(new Geschaeftskunde()));
        rechnungen.add(new Rechnung(new Geschaeftskunde()));
        rechnungen.add(new Rechnung(new Privatkunde()));
        rechnungen.add(new Rechnung(new Privatkunde()));
        rechnungen.add(new Rechnung(new Kunde()));
        rechnungen.add(new Rechnung(new Privatkunde()));

        System.out.println(rechnungen); // prints [G1, G2, P1, P2, K1, P3]
    }
}

class Kunde { }
class Geschaeftskunde extends Kunde { }
class Privatkunde extends Kunde { }
 
Zuletzt bearbeitet:

Barista

Top Contributor
Und ich habe nachgefragt, weil ich das Gefühl habe, dass schon die Ausgansfrage falsch gestellt war; hier sind keine generischen Klassen notwendig

Ich bin der gleichen Meinung.

Bei Generics geht es um Behälter, die unterschiedliche Dinge enthalten können (vereinfacht gesagt).
Parametrische Polymorphie.

Bei Rechnungen für Privat-Kunden und alternativ Geschäfts-Kunden geht es sicher um unterschiedliches Verhalten, also unterschiedliche Rechnungs-Formate.
Das ist klar ein Fall für objektorientierte Polymorphie, also unterchiedlich überschriebene Methoden.
 

MoxxiManagarm

Top Contributor
Ich sag ja nicht, dass ihr Unrecht habt. Aber ihr wisst doch nicht was Hieu insgesamt vorhat, vielleicht benötigt er die Parametrische Polymorphie und ist nur noch nicht erkennbar. Einfach mal angenommen die Rechnung bekommt später noch eine Methode/Attribut, welche es erlaubt die Rechnung nicht an den Kunden zuzustellen, sondern an einen anderen. Bei diesem Vorgang soll nur der Gleiche Kundentyp erlaubt sein wie der, für den die Rechnung ausgestellt ist, d.h. Rechnungsempfänger kann nur ein Privatkunde sein, wenn auch der Kunde ein Privatkunde ist. Dann ist Generics definitiv der richtige Weg.

Oder Generics ist vielleicht schlichtweg eine Vorgabe einer Uniaufgabe.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
I Generische Funktion Java Basics - Anfänger-Themen 3
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
A Generische Klassen/Interface Java Basics - Anfänger-Themen 1
Kirby.exe Generische Objekt Instanz erstellen Java Basics - Anfänger-Themen 14
D Generische Klasse Java Basics - Anfänger-Themen 6
H linkedlist generische klassen Java Basics - Anfänger-Themen 169
M Datentypen Generische Datentypen - Syntax Java Basics - Anfänger-Themen 25
O Generische Typen Java Basics - Anfänger-Themen 9
M Generische Klassen "FlaschenRegal" Java Basics - Anfänger-Themen 13
Queiser Datentypen 2 generische Datentypen für eine Schnittstelle Java Basics - Anfänger-Themen 1
M Generische Liste aus Comparable-Objekten Java Basics - Anfänger-Themen 6
J Sortierte generische Liste Java Basics - Anfänger-Themen 1
D statische generische Methoden Java Basics - Anfänger-Themen 3
S Wie muss ich die Generische Methode schreiben? Java Basics - Anfänger-Themen 6
M Methoden Generische Klasse - ändern einzelner Attributwerte Java Basics - Anfänger-Themen 2
S generische methode mit verschiedenen datentypen Java Basics - Anfänger-Themen 3
N Generische Schnittstellen Java Basics - Anfänger-Themen 2
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
D Generische Typen Java Basics - Anfänger-Themen 20
S Erste Schritte Generische Klassen sind toll ....aber warum sollte ich das je benutzen? Java Basics - Anfänger-Themen 3
L Generische Liste Java Basics - Anfänger-Themen 4
B Generische Queue programmieren Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
A Probleme mit MergeSort Generische Liste Java Basics - Anfänger-Themen 0
A Generische Methode Java Basics - Anfänger-Themen 4
H Collections List in List<SpecificType> als stat. generische Methode zurückgeben Java Basics - Anfänger-Themen 4
J Probleme mit static generische Klasse Java Basics - Anfänger-Themen 6
M Generische Liste Java Basics - Anfänger-Themen 4
B Generische Methode Java Basics - Anfänger-Themen 2
B Generische Klasse Java Basics - Anfänger-Themen 7
B Generische Methoden Java Basics - Anfänger-Themen 8
F Collections Generische Klasse/Methoden Java Basics - Anfänger-Themen 19
L Generische Warteschlange Java Basics - Anfänger-Themen 8
A Generische Datentypen Java Basics - Anfänger-Themen 8
bluerob generische ArrayList -> erbende Objekte auslesen Java Basics - Anfänger-Themen 24
L Generische Containerklasse Java Basics - Anfänger-Themen 9
V Methoden Umwandlung in generische Methode Java Basics - Anfänger-Themen 8
A Generische Collections und Vererbung Java Basics - Anfänger-Themen 2
S Generische HashMap Java Basics - Anfänger-Themen 2
M Klassen Generische Klassen, Personen und Gruppen Java Basics - Anfänger-Themen 6
L Generische ArrayList, CastProblem Java Basics - Anfänger-Themen 2
W generische Module Java Basics - Anfänger-Themen 2
S Generics und "generische Feldzuweisungen" Java Basics - Anfänger-Themen 5
C unterschied generische typen und supertypen als methodenparameter Java Basics - Anfänger-Themen 3
D Datentypen Generische Collections und Warnings Java Basics - Anfänger-Themen 8
F Generische Methoden Problem Java Basics - Anfänger-Themen 5
E Generische Arrays durch Typecast mit Object-Array Java Basics - Anfänger-Themen 11
K Generische Klasse mit innerer Klasse | Problem mit Array Java Basics - Anfänger-Themen 6
B Was passiert, wenn eine konkrete Klasse von generische Klasse erbt? Java Basics - Anfänger-Themen 14
B Generische Vererbung was ist der Unterschied? Java Basics - Anfänger-Themen 4
W Generische Klassen Java Basics - Anfänger-Themen 3
W Generische Klassen und Casting Java Basics - Anfänger-Themen 6
F Generische Typen auch für statische Methoden? Java Basics - Anfänger-Themen 13
J array über generische arraylist Java Basics - Anfänger-Themen 7
B instanceof Prüfung für generische Typen Java Basics - Anfänger-Themen 5
N 2 dimensionale generische Arrays Java Basics - Anfänger-Themen 9
H Statische generische Methode Java Basics - Anfänger-Themen 2
G Frage zum Ungang mit Generische Datentypen Java Basics - Anfänger-Themen 4
0x7F800000 generische arrays mal wieder )-; Java Basics - Anfänger-Themen 6
D generische methode <T> void . Java Basics - Anfänger-Themen 9
J Generische Methoden Java Basics - Anfänger-Themen 6
G Doppelt verkettete, generische Liste Java Basics - Anfänger-Themen 11
S Parameterübergabe: Generische Klasse Java Basics - Anfänger-Themen 4
S generische Felder Java Basics - Anfänger-Themen 2
P Generische Klasse Java Basics - Anfänger-Themen 8
C Generische Klassen, das erste Mal. Java Basics - Anfänger-Themen 8
F Generische Methode - was bringt der Wildcard Operator? Java Basics - Anfänger-Themen 7
F Generische Liste von generischen Objekten. Java Basics - Anfänger-Themen 3
H generische Methoden Java Basics - Anfänger-Themen 5
N generische HashMap und Iterator Java Basics - Anfänger-Themen 2
H generische Bausteine, heterogene Datenstrukturen Java Basics - Anfänger-Themen 2
J generische klassen neue Instanz Java Basics - Anfänger-Themen 5
H Generische Klassen. Java Basics - Anfänger-Themen 16
W Null-Pointer trotz Konstruktor? Java Basics - Anfänger-Themen 9
M Konstruktor-Aufruf im Konstruktor, aber nicht am Anfang? Java Basics - Anfänger-Themen 4
T Schlüsselworte Schlüsselwort this im Konstruktor Java Basics - Anfänger-Themen 3
frager2345 Warum muss ich hier im Konstruktor meine Exeption nicht abfangen ? Java Basics - Anfänger-Themen 4
J Konstruktor Java Basics - Anfänger-Themen 18
frager2345 Java Singleton Muster -> Methode für Konstruktor mit Parametern Java Basics - Anfänger-Themen 3
G Welche Attribute kommen in den Konstruktor? Java Basics - Anfänger-Themen 5
M wird der Konstruktor nicht als 1. ausgeführt? Java Basics - Anfänger-Themen 13
G Konstruktor und update Java Basics - Anfänger-Themen 4
K Kopier-Konstruktor Java Basics - Anfänger-Themen 6
S Default Konstruktor Java Basics - Anfänger-Themen 7
M Konstruktor ohne Übergabe eines Wertes Java Basics - Anfänger-Themen 7
M Wie kann ich in einem Konstruktor die Methode eines anderen Interfaces mit den jeweiligen Parametern aufrufen? Java Basics - Anfänger-Themen 8
J Vier gewinnt in Java,Spieler Konstruktor Java Basics - Anfänger-Themen 8
kxrdelis Konstruktor für ein Rechtwinkliges Dreieck Java Basics - Anfänger-Themen 10
Zeppi OOP Bruch kürzen im Konstruktor Java Basics - Anfänger-Themen 2
HorstSchröder Konstruktor mit Initialwert Java Basics - Anfänger-Themen 1
C Konstruktor ab serialisiertem Objekt Java Basics - Anfänger-Themen 4
J Input/Output Konstruktor ergänzen, der zur Datei mit einem Objekt passt Java Basics - Anfänger-Themen 0
InfinityDE Problem mit Datenübergabe an Konstruktor Java Basics - Anfänger-Themen 7
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
G Variablen Array Länge über den Konstruktor definieren Java Basics - Anfänger-Themen 4
L Konstruktor für eine Map-Datei/Map-Datei einlesen Java Basics - Anfänger-Themen 5
C Interface und Konstruktor Java Basics - Anfänger-Themen 1
MiMa Seltsames Verhalten im Konstruktor Java Basics - Anfänger-Themen 6
S Konstruktor passt nicht zum Rest Java Basics - Anfänger-Themen 11
C Unbekannter "Konstruktor"?? Java Basics - Anfänger-Themen 10

Ähnliche Java Themen

Neue Themen


Oben