Datentyp für Einzelnes Objekt oder Liste

beta20

Top Contributor
Hallo,

kann ich in einer Klasse ein Feld definieren, welches ein einzelnes Objekt, aber auch eine Liste sein kann? (Also ein ODER).

Das scheint ja nicht zu funktionieren, hier muss ich explizit die Unterscheidung machen

Java:
private Object value;
private List<Object> value;

Danke
 
Das geht so natürlich nicht. Ich verstehe auch nicht wirklich den Sinn dahinter. Denn wenn die Liste ein Element enthält, dann hast Du ja ein einzelnes Objekt.

Ansonsten kannst Du natürlich eine eigene Klasse bauen, die die Logik, die Du hinter so einer Sache, abbildest.
 
Nein da ist kein Oder ... das nennt man "Generics" falls ich dich richtig verstanden hab
Java:
private List<Object> value;
dieser Ausdruck sagt auf Deutsch ausgedrückt "leg mir ein Liste Objekt an mit dem Namen value UND (<Object) diese Liste ist für die Objekte des Typs Object"

dh du darfst da nur Objekte rein legen die von Object erben... das sind alle ausser Number glaub ich und Simple Datentypen..


wo es mehr klar wird
Java:
private List<MyObject> value;
in dieser Liste darfst du nur MyObject Objekte ablegen oder die diese extenden
 
Mein Use - Case ist:

Ich habe eine Auswahlbox. Diese kann sein:
- Einfachauswahlbox (es kann nur ein Wert gewählt werden)
oder
- Mehrfachauswahlbox (es können mehrere Werte gewählt werden)

Demnach brauchte ich entweder ein einzelnes Object. Der Property - Name ist bspw. "value".

Java:
private MyClass value;
private List<MyClass> value;

Von welcher Klasse das Objekt bzw. Property ist, ist egal - es sollte jedes beliebige Objekt sein können.
Geht das?
 
Ich habe eine Auswahlbox. Diese kann sein:
- Einfachauswahlbox (es kann nur ein Wert gewählt werden)
oder
- Mehrfachauswahlbox (es können mehrere Werte gewählt werden)
Das ist aber doch über eine Liste abgedeckt. Bei erster kann aber halt nur ein Wert in der Liste sein.

Wenn Du zwei Elemente hast und das getrennt haben willst, dann kannst Du das entsprechend implementieren. Dann hast Du halt die Variablen einfachAuswahlBoxWert und mehrfachAuswahlBoxWerte.
 
Nein, ich möchte Primefaces verwenden:

Einzelne Liste:
-> private String selectedOption;

Mehrfach Liste:
-> private List<String> selectedOptions;

In meiner Klasse will ich aber nur ein Objekt. Beim Rendering wird dann entschieden ob es die Einzelne Liste oder die Mehrfach Liste ist.
Mein Property für die UI Komponente der Eingabe soll aber beides mal der gleiche sein, der aber eben ein einzelner Wert oder eine Liste sein kann

Hoffe es wird damit klar, was ich machen möchte.
 
Um auch auf deine ursprüngliche Frage zu antworten: Composite Pattern.

Ob das für deinen Anwendungsfall nun das Richtige ist oder nicht, mal ganz dahingestellt...
 
Nein, ich möchte Primefaces verwenden:

Einzelne Liste:
-> private String selectedOption;

Mehrfach Liste:
-> private List<String> selectedOptions;

In meiner Klasse will ich aber nur ein Objekt. Beim Rendering wird dann entschieden ob es die Einzelne Liste oder die Mehrfach Liste ist.
Mein Property für die UI Komponente der Eingabe soll aber beides mal der gleiche sein, der aber eben ein einzelner Wert oder eine Liste sein kann

Hoffe es wird damit klar, was ich machen möchte.
Es wurde eigentlich schon ziemlich eindeutig beantwortet. Verwende eine Liste, die dann 0, 1 oder mehr Elemente enthält.

Wenn es möglich WÄRE, dass ein Objekt beides ist (tatsächlich ist es das auch, es hindert dich keiner daran, in eine Object-Variable eine Liste zu speichern), dann müsstest du bei jedem Zugriff prüfen, ob es sich um eine Liste handelt und entsprechend casten.

Verwendest du von Haus aus eine Liste, dann sparst du dir das und musst nur prüfen, wie lang die Liste ist. Beim Rendern fährst du mit for-each drüber und brauchst dich nicht darum zu kümmern, wie viel darin gespeichert ist.
 

Neue Themen


Zurück
Oben