Parameter in verschiedenen Anzahl und Typen

Carcharoth

Bekanntes Mitglied
Hallo

Ich möchte eine Klasse Programmieren die verschiedene Variablen halten und bearbeiten soll.
Nun weiss ich aber nicht im Voraus wie viele Variablen und von welchen Typen.

Der Konstruktor müsste also mit Parametern wie "int, int, String, String, double" oder auch "String, int, int" zurecht kommen.

Ich habe mir den Weg über eine ArrayList von Objekten überlegt. Das die ArrayList die primitiven Typen "wrappt" ist für mich i.O.
Gibt es einen besseren Weg ?

Java:
public class TestEintrag {
    public ArrayList<Object> daten;

    public TestEintrag(ArrayList<Object> daten) {
        this.daten = daten;
    }
    
    public void print() {
        for (Object ding: daten) {
            System.out.println(ding.getClass() + " --> " + ding.toString());
        }
    }

    public static void main(String[] args) {
         ArrayList<Object> liste = new ArrayList<Object>(){{
                add(1);
                add("Hund");
                add(3.14);
                add("Katze");
                add(2);
                   }};
                  
        TestEintrag testEintrag = new TestEintrag(liste);
        testEintrag.print();
    }
}
 
Beste Antwort
Du kannst nur verarbeiten, was du kennst.
Eine Möglichkeit ist eben Object zu akzeptieren und dann mit der oben genannten Map zu arbeiten.
Die andere ist, die selbe Methode mit verschiedenen Parametern anzubieten.
Zusätzlich kannst du noch eine Object-Methode anbieten, falls beim Kompilieren tatsächlich noch nicht klar ist, was reinkommt.

Java:
public void handle (String value) {
    
}
public void handle (Integer value) {
    
}
public void handle (Character value) {
    
}

public void handle(Object o) {
    if (o == null) {
        System.out.println("null");
    } else if (o instanceof String s) {
        handle(o);
    } else if(o instanceof Integer i) {
        handle(i);
    } else if(o instanceof Character c) {
        handle(c)...

httpdigest

Top Contributor
Du müsstest hier schon konkreter werden. Eine Klasse, "die verschiedene Variablen halten und bearbeiten soll", klingt erstmal komisch.
Was ist denn genau der Anwendungsfall?
Wo werden die Variablen später genutzt?
 

Carcharoth

Bekanntes Mitglied
Ich könnte z.B. Einträge in eine Datenbank speichern wollen.
Vielleicht sind es dann auch mehrere Datenbanken und dann sehen die Einträge nicht immer gleich aus.

Beispiel:
  • Eintrag Typ A für die Datenbank der Mitarbeiter speichert jeweils Name (String), Vorname (String), Alter (int), Grösse (double), Gewicht (double)
  • Eintrag Typ B für die Datenbank der Lieferanten speichert jeweils Firmenname (String), Postleitzahl (int), Ort (String), Umsatz (double)

Damit ich aber immer die gleiche Klasse Eintrag benutzen kann, muss sie mit verschiedenen Sätzen an Variablen zurecht kommen.
 

Neumi5694

Top Contributor
Du kannst nur verarbeiten, was du kennst.
Eine Möglichkeit ist eben Object zu akzeptieren und dann mit der oben genannten Map zu arbeiten.
Die andere ist, die selbe Methode mit verschiedenen Parametern anzubieten.
Zusätzlich kannst du noch eine Object-Methode anbieten, falls beim Kompilieren tatsächlich noch nicht klar ist, was reinkommt.

Java:
public void handle (String value) {
    
}
public void handle (Integer value) {
    
}
public void handle (Character value) {
    
}

public void handle(Object o) {
    if (o == null) {
        System.out.println("null");
    } else if (o instanceof String s) {
        handle(o);
    } else if(o instanceof Integer i) {
        handle(i);
    } else if(o instanceof Character c) {
        handle(c);
    } else {
        System.out.println("Unknown type: " + o.getClass().getName());
    }
}
 
Beste Antwort

KonradN

Super-Moderator
Mitarbeiter
Also Daten sollte man immer sauber modellieren. Wenn Du das Thema Datenbank nimmst, dann hast Du da ja schon ein super Beispiel. Wie ist das aufgebaut?

Du hast Tabellen mit Spalten. Zu jeder Spalte gibt es dann Name und Typ (Wobei Typ recht viel beinhaltet).
Dann hast Du Rows. Diese rows speichern Werte für jede Spalte.

Wenn man sich so ein Resultset anschaut, dann hat man ja:
  • Man kann sich als Object geben lassen. Dann ist es halt irgendwas (was halt dem Typ entspricht)
  • Man kann es sich als bestimmten Typ zurück geben lassen - ob das Sinn macht oder nicht muss man dann entscheiden - dann gibt es ggf. eine Exception.

Das kann man dann z.B. genau so abbilden.

In Deinem Fall kann man es schon ganz trivial machen: Dann hast Du z.B. einfach eine Klasse wie:
Java:
public class DataRow {
    private Object[] values;
    
    public DataRow(Object... values) {
        this.values = values;
    }
}

Da kannst Du jetzt irgendwas an Daten speichern. Du hast absolut keine Grenzen!
Wenn Du also eine List<DataRow> hast, dann sind die alle voneinander unabhängig. Der erste Eintrag hat z.B. nut ein Wert und das ist ein String. Die Zweite Reihe hat 5 Werte und das sind alles Double.
==> Keine Grenzen!

Und damit kommen wir zu dem Kernproblem, weshalb man sowas ungerne macht: Du hast dann keinerlei Typkontrolle zur Compilezeit. Du bekommst irgendwelche Object Arrays und Du hast keinerlei Kontrolle, was da drin ist und wie viele Elemente da drin sind. Der größte Vorteil von Sprachen wie Java ist aber die Typsicherheit. Die einfach so wegzuwerfen ist extrem unschön.

Daher gibt es dann viel Code zur Prüfung der Typen - das macht dann z.B. ResultSet - das kennt dann die Typen einer jeden Spalte und kann daher klar sagen, wie auf so einen Wert zugegriffen werden kann.

Das kann man aber machen:
Java:
public class Data {
    private Object value;
    private KnownTypes type;
    
    public Object getValue() { return value; }
    
    public String getValueAsString() { return value.toString(); } // Wenn eine Convertierung gewünscht wird.
    
    public String getIntValue() {
        if (value != null && value instanceOf Integer i)
            return i;
        
        throw new WhateverException("Not an Integer or null!");
    }
    
    ...
}

Aber damit hast Du dann ganz viel Kontrollen, was denn ein Wert ist oder nicht ist. Daher: Prüfe Dein Design!

Die angesprochene map ist ansonsten prinzipiell die Möglichkeit, auf irgendwelche if Arien zu verzichten. Das geht aber nur, wenn die Anzahl der Typen klar begrenzt ist und Du also nach den Typen suchen kannst. Das hört aber auf zu funktionieren, wenn Du auch mit abgeleiteten Klassen arbeiten willst oder mit Interfaces. Sprich: Da wird die Map auch recht schnell obsolet und es läuft auf eine eigene Implementierung hinaus.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
C Interface Parameter und Rückgabewerte in Lambda Ausdrücken verwenden Java Basics - Anfänger-Themen 16
M methode aufrufen ohne parameter Java Basics - Anfänger-Themen 1
MiMa Java Doc mehrere Return Parameter Java Basics - Anfänger-Themen 11
BeginnerJava "Weihnachtsbäume" anzeigen: Höhe als Parameter Java Basics - Anfänger-Themen 1
R Methoden Werte einer ArrayList als Parameter übergeben. Java Basics - Anfänger-Themen 4
I Optionaler Parameter bei Methode, der nur optional ist? Java Basics - Anfänger-Themen 6
berserkerdq2 Zwei Klassen Erben von der Klasse A, die eine Klasse kann ich an Methoden übergeben, die als Parameter A haben, die andere nicht? Java Basics - Anfänger-Themen 3
Jambolo Methode, welche die 3 letzten Parameter Werte speichert Java Basics - Anfänger-Themen 20
L Beim Java Programmstart, mehrere Parameter über die Kommandozeile übergeben Java Basics - Anfänger-Themen 9
M Interface als Parameter einer Klasse Java Basics - Anfänger-Themen 8
R Eigenschaft über Parameter auslesen und ändern Java Basics - Anfänger-Themen 15
P Eclipse Karate Framework API Test . Unexpected Error: the trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 1
X Default Parameter Java Basics - Anfänger-Themen 20
J Interface methode aufrufen (interface parameter) Java Basics - Anfänger-Themen 7
KogoroMori21 Variable im Parameter und Ohne Java Basics - Anfänger-Themen 5
J Bestimmte parameter aus Jsonfile auslesen Java Basics - Anfänger-Themen 15
I JAX-RS Mehrere Parameter in Query Java Basics - Anfänger-Themen 3
H Warum kann man keine Parameter in die main-Methode packen? Java Basics - Anfänger-Themen 4
B Konstruktor mit Array als Parameter Java Basics - Anfänger-Themen 3
D Best Practice Parameter int vs byte Java Basics - Anfänger-Themen 16
L Methode implementieren, Parameter die übergeben werden sind final Java Basics - Anfänger-Themen 4
L Wie greife ich in der Subklasse auf die Parameter einer Methode der Superklasse zu ? Java Basics - Anfänger-Themen 15
C Methoden-Parameter ist Interface Java Basics - Anfänger-Themen 5
J Apache Poi - createCell() Methode akzeptiert keinen Index aus for-schleife als Parameter Java Basics - Anfänger-Themen 4
P Parameter auf Datenformat überprüfen Java Basics - Anfänger-Themen 5
S Hamster Simulator rechnen lernen Parameter int Java Basics - Anfänger-Themen 6
Curtis_MC Parameter-Übergabe bei Klassen und Methoden Java Basics - Anfänger-Themen 12
C Java Methoden "Parameter" Problem Java Basics - Anfänger-Themen 16
W Parameter solange addieren bis 13 auftaucht Java Basics - Anfänger-Themen 11
L OOP Parameter mit der Draw-Methode übergeben Java Basics - Anfänger-Themen 11
B Frage zu: String... strings -> Ungleiche Anzahl an Parameter? Java Basics - Anfänger-Themen 4
L Methoden Übergabe von Parameter Java Basics - Anfänger-Themen 3
R Zu viele leere Parameter Java Basics - Anfänger-Themen 8
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 2
H Frage zu Parameter einer Methode Java Basics - Anfänger-Themen 3
B Klassen Array Parameter im Konstruktor? Java Basics - Anfänger-Themen 4
V Unbekannte Parameter Java Basics - Anfänger-Themen 1
J Input/Output Input als Parameter an Methoden übergeben Java Basics - Anfänger-Themen 23
B CSV einlesen - Parameter a) encoding b) delimiter Java Basics - Anfänger-Themen 7
U Mehrfacheingabe auf bestimmte Parameter prüfen Java Basics - Anfänger-Themen 8
A festgelegte Parameter Java Basics - Anfänger-Themen 11
PaperHat Methoden als Parameter anderer Methode verwenden Java Basics - Anfänger-Themen 11
D Interface Final für Parameter in überschriebenen Methoden? Java Basics - Anfänger-Themen 3
P Variablen Optionaler Parameter auf der Kommandozeile Java Basics - Anfänger-Themen 12
S Variable Parameter Java Basics - Anfänger-Themen 5
L Variablen Parameter bekommen Java Basics - Anfänger-Themen 13
M Methode mit Array als Parameter an Main übergeben Java Basics - Anfänger-Themen 1
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 7
A Aufruf von Konstruktor , obwohl 2 Parameter weggelassen werden Java Basics - Anfänger-Themen 0
B Webservice -> alle parameter bekommen von form Java Basics - Anfänger-Themen 2
K Klassenmethode mit übergebenen Parameter speichern Java Basics - Anfänger-Themen 7
I BigDecimal als Parameter verwenden Java Basics - Anfänger-Themen 3
J Parameter in main verwenden Java Basics - Anfänger-Themen 3
J Programm was üer Runtime.getRuntime gestartet wird erkennt String Parameter nicht Java Basics - Anfänger-Themen 0
G Int-Array im Konstruktor Parameter Java Basics - Anfänger-Themen 37
T Parameter das übergeben wurde ändern? Java Basics - Anfänger-Themen 1
D Anfänger-Fragen(Parameter einer Methode) Java Basics - Anfänger-Themen 7
P Operatoren Parameter nicht auf null geprüft? Java Basics - Anfänger-Themen 16
D Name eines JMenue als Parameter übergeben Java Basics - Anfänger-Themen 20
K Dynamischen Supplier für Parameter Java Basics - Anfänger-Themen 12
C Methoden Welche JSoup Methoden Und Parameter für diese HTML Tags Java Basics - Anfänger-Themen 4
A Die Werte zur Berechnung müssen als Parameter übergeben werden? Java Basics - Anfänger-Themen 7
H Klassen Konstruktor Parameter als Instanzvariablen zwischen speichern... Java Basics - Anfänger-Themen 11
W Methoden Methode ohne Parameter auf Instanz eines Objekts aufrufen? Java Basics - Anfänger-Themen 14
M Methode mit Parameter Java Basics - Anfänger-Themen 4
G Objektübergabe durch Parameter Java Basics - Anfänger-Themen 3
J Erste Schritte catch Exeption Parameter Java Basics - Anfänger-Themen 7
A Erste Schritte Methoden mit Parameter Java Basics - Anfänger-Themen 2
D Statische Objekte mit variablem Parameter Java Basics - Anfänger-Themen 1
N Klassen Klassen zwingende Parameter mitteilen Java Basics - Anfänger-Themen 4
L Methoden Methode Parameter vertauschen? Java Basics - Anfänger-Themen 3
C Auswertung Ausdruck mit Punknotation + Objekt als Parameter Java Basics - Anfänger-Themen 3
A Methoden Parameter optionalisieren möglich? - Wie? Java Basics - Anfänger-Themen 19
N Beliebig viele parameter Java Basics - Anfänger-Themen 3
F Methoden: Referenzvariable als Parameter Java Basics - Anfänger-Themen 4
J HttpGet Parameter mitgeben Java Basics - Anfänger-Themen 5
S Generische Methode soll Objekte als Parameter erlauben die bestimmtes Interface implementieren^ Java Basics - Anfänger-Themen 9
T Klasse von erfahren wenn Obertyp Parameter ist Java Basics - Anfänger-Themen 6
J Klassen Fehler mit Parameter des Konstruktors bei einer Objekterzeugung Java Basics - Anfänger-Themen 5
V Parameter in synchronized-Blöcken verstehen Java Basics - Anfänger-Themen 2
M Klasse als Parameter übergeben Java Basics - Anfänger-Themen 7
S Methoden eine Instanz einer eigenen Klasse als parameter übergeben Java Basics - Anfänger-Themen 9
T unterschiedlich viele parameter übergeben Java Basics - Anfänger-Themen 5
V Methoden key value Parameter Java Basics - Anfänger-Themen 11
J Drucker parameter ändern Java Basics - Anfänger-Themen 9
F trustAnchors parameter must be non-empty Java Basics - Anfänger-Themen 0
O Basisklassen als Methoden-Parameter ähnlich, wie in C++ ? Java Basics - Anfänger-Themen 6
D GregorianCalendar als Parameter Java Basics - Anfänger-Themen 2
M Parameter von Konstruktor, der Superklassen-Konstruktor aufruft Java Basics - Anfänger-Themen 2
E Problem beim Übergeben von Parameter an Methode Java Basics - Anfänger-Themen 2
O ArrayListe sortieren anhand zweier Parameter Java Basics - Anfänger-Themen 4
S Methoden Rückgabewert einer Methode als Parameter an eine andere Methode übergeben, geht das? Java Basics - Anfänger-Themen 5
D Enum als Parameter Java Basics - Anfänger-Themen 6
T In main-Methode Parameter übergeben Java Basics - Anfänger-Themen 3
M Methode als Parameter übergeben Java Basics - Anfänger-Themen 16
Joew0815 Methoden Objekt als Methoden-Parameter - Kein call-by-reference? Java Basics - Anfänger-Themen 12
T Parameter in Eigner Konsole Java Basics - Anfänger-Themen 2
ElfterDoktor Einen Objekt Attribute/Parameter geben & Auslesen Java Basics - Anfänger-Themen 4
R Erste Schritte Unterschied Array-Parameter zu Array als Parameter? Java Basics - Anfänger-Themen 7
HoloYoitsu args-Parameter durchschleifen (Schnittstelle erweitern?) Java Basics - Anfänger-Themen 27

Ähnliche Java Themen

Neue Themen


Oben