Variant-Datentyp

Status
Nicht offen für weitere Antworten.

apfelsine

Aktives Mitglied
Hallo,

ich suche ein äquivalent zum Datentyp Variant aus VB

Hintergrund ist, das nicht bekannt ist, welcher Datentyp an
das Objekt übergeben werden wird.
hat jemand einen Tip?
Danke schonmal im Vorraus!

apfelsine
 

Reality

Top Contributor
Du kannst ja mehrere Konstruktoren oder Methoden erstellen mit verschiedenen Parametern bzw. Typen. Die richtig Methode wird dann automatisch aufgerufen.

Liebe Grüße
Reality
 

Anubis

Bekanntes Mitglied
Für Elementare Datentypen gibt es sowas nicht. Aber es gibt für jeden Elementaren Datentyp eine Wrapperklasse (zb. Die Integer-Klasse (Schaue in der API nach).
Und ALLE Klassen sind in Java eine Erweiterung von Object. WEnn du also eine Variable folgendermaßen deklariert:
Code:
Object var;
, dann kannst du in var alles reinpacken, was ein Obejct ist.
 

Thorsten

Mitglied
Ähmmm ???:L

Das geht nicht! Es muss der Datentyp vorher bekannt sein. Und mir ist kein Fall
bekannt, in dem das nicht geht :wink: Von wo erhälst du denn ein unbekanntes
Objekt?

In Java sind ALLE Objekte von Object vererbt. Also kannst du immer mit Object
arbeiten.

Aber gib mal ein Beispiel :toll: Ich will mal sehen, wo du ein unbekanntes
Objekt her bekommst :wink:

In Java 5 gibt es eine Möglichkeit... mit den Generics oder so. Finde ich aber
nicht so gut, und habs auch nicht im Kopf. Das muss wer anders erklären :bae:
 

P3AC3MAK3R

Top Contributor
Reality hat gesagt.:
Du kannst ja mehrere Konstruktoren oder Methoden erstellen mit verschiedenen Parametern bzw. Typen. Die richtig Methode wird dann automatisch aufgerufen.
So würde ich das auch lösen.

Falls Du nähere Infos brauchst, suche am besten nach dem Stichwort "Überladung".
 

meez

Top Contributor
Thorsten hat gesagt.:
In Java sind ALLE Objekte von Object vererbt. Also kannst du immer mit Object
arbeiten.

Bringt einfach nichts, da du dann auch nur die Methoden von Object verwenden kannst...
 

Thorsten

Mitglied
meez hat gesagt.:
Thorsten hat gesagt.:
In Java sind ALLE Objekte von Object vererbt. Also kannst du immer mit Object
arbeiten.

Bringt einfach nichts, da du dann auch nur die Methoden von Object verwenden kannst...

Das ist richtig. Aber er kann zumindest ein "unbekanntes Objekt" aufnehmen.
Wir wissen ja nicht, was er vorhat. Wenn er es nur auf die Festplatte schreiben
will, geht das.

Aber wenn er den "echten" Zieltyp auf eine handvoll einschränken kann, kann er
in einem großen if-Konstrukt in einer try-catch-Schleife versuchen das richtige
Objekte zu finden. Das würde gehen --> also eine Art cast-Filter 8)

Es gibt auch noch einen unerklärlichen Effekt beim vererben, mit dem man
so einen cast-Filter realisieren kann. Bei Interesse kann ich es zeigen :D
 

Thorsten

Mitglied
Also das Hauptprogramm / Main-Methode:

Code:
import java.util.Vector;

public class Cast
{
   private static Vector vec;
   
   private static mnSprites mySprite;
   private static mnMusic myMusic;
   private static mnObject myObject;

   public static void main(String[] args)
   {
       mySprite = new mnSprites("grafik");
       myMusic = new mnMusic("musik");

       vec = new Vector();
       vec.add(mySprite);
       vec.add(myMusic);

       for (int i = 0; i<2; i++)
       {
          myObject = (mnObject) vec.get(i);
          myObject.castIntoOwnClass(myObject);
       }
   }
}

Klasse mnObject:
Code:
public abstract class mnObject
{
   public mnObject()
   {
   }

   public abstract void castIntoOwnClass(mnObject myObject);
}

Klasse mnMusic:
Code:
public class mnMusic extends mnObject
{
   String Inhalt;

   public mnMusic(String Inhalt)
   {
      this.Inhalt = Inhalt;
   }

   public void castIntoOwnClass(mnObject myObject)
   {
      mnMusic myMusic = (mnMusic) myObject;
      workWithIt(myMusic);
   }

   private void workWithIt(mnMusic myMusic)
   {
      System.out.println(myMusic.Inhalt);
   }
}

Und die Klasse mnSprite:
Code:
public class mnSprites extends mnObject
{
   String Inhalt;

   public mnSprites(String Inhalt)
   {
      this.Inhalt = Inhalt;
   }

   public void castIntoOwnClass(mnObject myObject)
   {
      mnSprites mySprite = (mnSprites) myObject;
      workWithIt(mySprite);
   }

   private void workWithIt(mnSprites mySprite)
   {
      System.out.println(mySprite.Inhalt);
   }
}

Im Prinzip darf dieser Code nicht funktionieren. Aber er geht! ???:L Ist also irgendwie unerklärlich,
wie Java weiß, welches Objekt nun welches ist...

Aber man kann es schon ahnen:
Wenn man Objekte zum Beispiel per XML auf die Festplatte schreibt, dann speichert auch den
Objekttyp mit. Java weiß also intern, welches Objekt von welchen Typ ist. Schade, dass es
dann kein casten per Variable in Java gibt, also:

Code:
private String castTo = "Integer";
Integer bla = (castTo) meinVector.get(n)

Sowas in der Art... also das Cast-Ziel per String angeben. Das wäre cool. Denn offentsichtlich
kennt Java ja doch den Datentyp intern...
 

Bleiglanz

Gesperrter Benutzer
>>Im Prinzip darf dieser Code nicht funktionieren.

warum? Stichwort polymorhie

>> Aber man kann es schon ahnen: Wenn man Objekte zum Beispiel per XML

hä? was ist das?

>>auf die Festplatte schreibt, dann speichert auch den
>>Objekttyp mit. Java weiß also intern, welches Objekt von welchen Typ ist.

willkommen in der Java welt

>> Schade, dass es dann kein casten per Variable in Java gibt, also:
>> castTo = "Integer"; Integer bla = (castTo) meinVector.get(n)

total derangiert, so eine Funktion wäre in Java definitv sinnlos, weil links "Integer bla" steht, muss rechts sowieso Integer stehen
 

Thorsten

Mitglied
MammutsknochenAusAstrakan hat gesagt.:
>Im Prinzip darf dieser Code nicht funktionieren.
warum? Stichwort polymorhie

Schlaumeier, was? :roll:
Das ist schon klar.

Der Vector liefert mit der get-Methode aber einen Rückgabewert
Object. Nun caste ich diesen in mnObject. mnObject ist aber abstrakt.

mnObject hat im Prinzip keine Ahnung, ob er nun mit mnMusic oder
mnSprite weiter machen soll.


Woher soll er das wissen?

Aber er weiß es eben doch... merkwürdiger weise...

>> Aber man kann es schon ahnen: Wenn man Objekte zum Beispiel per XML
hä? was ist das?

Du weißt nicht, was XML ist, spuckst aber große Töne, was? :roll:
Ich werde XML jetzt nicht erklären.

Aber mit einem XMLEncoder (java.beans) kann man ein Object in XML
auf die Festplatte schreiben (wenn man einen FileOutputStream benutzt).
Die Klasse XMLEncoder hat die Methode writeObject(). Die Methode
schreibt also nur Objekte vom Typ Object.

Und beim lesen gibt die Methode nur Object zurück. Also muss man
wieder casten. Und wenn man nicht genau weiß, was für Typen in der
Datei sind? Kann man es vergessen...

Doch Java schreibt den richtigen Datentyp in die XML-Datei, im Klartext.
Das ist eben ärgerlich. Java kennt den Typ im Prinzip, gibt aber natürlich
nur Object zurück...

>>auf die Festplatte schreibt, dann speichert auch den
>>Objekttyp mit. Java weiß also intern, welches Objekt von welchen Typ ist.
willkommen in der Java welt

So klar ist das nicht! Wie gesagt: Man schreibst und liest nur Daten vom Typ
"Object". Da ist es schon wunderlich, dass Java überhaupt den richtigen Datentyp
schreibt...

>> Schade, dass es dann kein casten per Variable in Java gibt, also:
>> castTo = "Integer"; Integer bla = (castTo) meinVector.get(n)
total derangiert, so eine Funktion wäre in Java definitv sinnlos, weil links
"Integer bla" steht, muss rechts sowieso Integer stehen

So ein Blödsinn. Hast überhaupt Ahnung?

Wie ich schon geschrieben habe: get() von Vector liefert ein Object zurück.
Man muss also casten.


Nun stelle man sich vor, man wolle ein Actionspiel mit Java programmieren.
Ich habe also Klassen wie Krieger, Spieler, Rüstungen, Inventar etc. pp.

Wenn ich die Objekte dieser Klassen in eine Datei schreibe, muss ich sie
als Object schreiben.

Beim lesen hab ich dann ein Problem:
Wie weiß ich jetzt, was für ein Objekt ich habe? Inventar? Spieler? ...
Da wäre es schon interessant das Cast-Ziel dynamisch zu wählen.
Mit tray-catch könnte man dann das richtige Ziel schnell finden.

Oder eine Methode getNextTyp() beim XMLDecoder oder beim ObjectInputStream
wäre genau das Richtige. Wäre ja kein Problem für Sun. Aber leider gibt es das
nicht.
 
B

bygones

Gast
Zum ersten erbitte ich mir hier keine Beleidigungen - man kann das Ganze auch auf eine nette Art und Weise vermitteln !

Thorsten hat gesagt.:
Der Vector liefert mit der get-Methode aber einen Rückgabewert
Object. Nun caste ich diesen in mnObject. mnObject ist aber abstrakt.

mnObject hat im Prinzip keine Ahnung, ob er nun mit mnMusic oder
mnSprite weiter machen soll.


Woher soll er das wissen?

Aber er weiß es eben doch... merkwürdiger weise... .
Sorry das Problem versteh ich nicht... Die methode get liefert natürlich den Typ Object zurück weil die Klasse Collection keine Ahnung hat was für Objekte reingesteckt werden. Beim ausführen aber ist Java klar was für ein Datentypo verwendet wird - auch sonst wären die generelle Verwendung von Interfaces / abstrakten Klasse unsinnig ?!

PS: mit den Generics ab 1.5 ist das Problem dann sowieso obsolet !
 
B

bygones

Gast
Thorsten hat gesagt.:
Wenn ich die Objekte dieser Klassen in eine Datei schreibe, muss ich sie
als Object schreiben.
Beim lesen hab ich dann ein Problem:
Wie weiß ich jetzt, was für ein Objekt ich habe? Inventar? Spieler? ...
Da wäre es schon interessant das Cast-Ziel dynamisch zu wählen.
Mit tray-catch könnte man dann das richtige Ziel schnell finden.
muss nicht try / catch sein - instanceof ginge auch. Aber du könntest einen delimiter schreiben oder die Objekte in eine Collection oder Map z.b. packen und dann die Collection / Map schreiben - dann ersparst du dir das komplizierte lesen....
 

apfelsine

Aktives Mitglied
Ich sehe, ich habe eine streitbare Frage gestellt
:D
Auf jeden Fall schonmal danke für die ausführlichen Antworten,
das bringt mich schon viel weiter.

apfelsine :wink:
 

Thorsten

Mitglied
deathbyaclown hat gesagt.:
Thorsten hat gesagt.:
Wenn ich die Objekte dieser Klassen in eine Datei schreibe, muss ich sie
als Object schreiben.
Beim lesen hab ich dann ein Problem:
Wie weiß ich jetzt, was für ein Objekt ich habe? Inventar? Spieler? ...
Da wäre es schon interessant das Cast-Ziel dynamisch zu wählen.
Mit tray-catch könnte man dann das richtige Ziel schnell finden.
muss nicht try / catch sein - instanceof ginge auch. Aber du könntest einen delimiter schreiben oder die Objekte in eine Collection oder Map z.b. packen und dann die Collection / Map schreiben - dann ersparst du dir das komplizierte lesen....

Super :toll: instanceof war mir noch unbekannt :D Das muss ich mir merken :wink:
Was ist ein Delimiter?
 
B

bygones

Gast
Thorsten hat gesagt.:
Super :toll: instanceof war mir noch unbekannt :D Das muss ich mir merken :wink:
Was ist ein Delimiter?
instanceof ist vor allem programmiertechnisch besser als zig exceptions handlings..

delimiter = Begrenzer. Soll heißen du liest solange Objecte ein bis ein definierter Delimiter kommt (was weiß ich, in integer oder so), dann weißt du dass z.b. eine andere Klasse nun folgt usw.

aber wie gesagt - entweder mit instanceof oder in eine collection oder map packen und die serialisieren
 

Bleiglanz

Gesperrter Benutzer
Code:
Wie weiß ich jetzt, was für ein Objekt ich habe? Inventar? Spieler? ...
Da wäre es schon interessant das Cast-Ziel dynamisch zu wählen.
Mit tray-catch könnte man dann das richtige Ziel schnell finden.

Es hat keinen Sinn, ein Cast-Ziel dynamisch zu wählen, wohin willst du denn casten: du kannst das Ergebnis ja nicht in eine Variable legen (es sei denn, es gibt einen gemeinsamen Obertypen - z.B. ein Interface - aber dann könntest du gleich in diesen Obertyp casten)?

Angenommen du nimmst ein Object o = list.get(0) aus einer Collection. Was dann? Jetzt soll dynamisch was passieren, abhängig vom Typ von o.

=> mach ein paar if(o instanceof )...

=> oder mach o.getClass().getName() und dann die ifs

usw. Wenn du dann den Typ kennst, kannst du ja mit T t = (T) o; casten usw.

Kannst du mal erklären, wie ein dynamischer cast funktionieren sollte????
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
F Datentypen Wertebereiche passender Datentyp Java Basics - Anfänger-Themen 5
K Warum wird mir hier nach dem ersten Durchlauf zwei mal "welchen Datentyp wollen sie übergeben?" ausgegeben ? Java Basics - Anfänger-Themen 1
MiMa Probleme mit Datentyp long ?? Java Basics - Anfänger-Themen 2
D Arraylist mit Komplexen Datentyp Java Basics - Anfänger-Themen 3
Igig1 Welche Werte sind als default Werte in einem Array, der als Datentyp eine Klasse hat? Java Basics - Anfänger-Themen 1
B Datentyp für Einzelnes Objekt oder Liste Java Basics - Anfänger-Themen 9
C initialisieren eines arrays richtiger Größe und mit geeignetem Datentyp Java Basics - Anfänger-Themen 26
H Datentyp mit 3 Zuständen Java Basics - Anfänger-Themen 42
javaluke Erste Schritte Array nach Datentyp sortieren Java Basics - Anfänger-Themen 16
Kanaska Datentyp für Zahlenbereiche Java Basics - Anfänger-Themen 7
A Datentyp char Java Basics - Anfänger-Themen 27
I Klassen als Datentyp nutzen? Java Basics - Anfänger-Themen 11
C unverständlicher Code Attribute ohne Datentyp, wie geht das? Java Basics - Anfänger-Themen 8
T Datentyp mit Anführungszeichen drinnen Java Basics - Anfänger-Themen 3
R Datentypen Datentyp String lenght & charAT Java Basics - Anfänger-Themen 4
M Array mit eigenem Datentyp probleme beim übergeben Java Basics - Anfänger-Themen 6
C Interface als Datentyp eines Attributes? Java Basics - Anfänger-Themen 6
B Datentypen Datentyp welcher den gleichen Namen wie die Klasse trägt? Java Basics - Anfänger-Themen 1
D Datentypen Welcher ist der beste Datentyp? Java Basics - Anfänger-Themen 28
F Datentypen Missverständnis Datentyp Java Basics - Anfänger-Themen 2
D Rechnen mit numerischen Datentyp Frage Java Basics - Anfänger-Themen 16
E Klassename als Datentyp??? Java Basics - Anfänger-Themen 4
F Wertebereich/Datentyp Java Basics - Anfänger-Themen 26
M Datentypen Java Datentyp Definition Java Basics - Anfänger-Themen 6
MiMa Datentyp Short Wert zuweisen über Methode Java Basics - Anfänger-Themen 2
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
D Klassen Gesucht: Einfache Beispiel-Klasse für einen Datentyp Java Basics - Anfänger-Themen 7
E Datentypen Benutzerdefinierten Datentyp verwenden Java Basics - Anfänger-Themen 1
ms_cikar Java Datentyp unwandlung Java Basics - Anfänger-Themen 7
G Datentypen Tipps, Ratschläge erwünscht bzgl. Datentyp bestimmen über Wertebereich Java Basics - Anfänger-Themen 5
Y Warum void statt Datentyp + return Java Basics - Anfänger-Themen 4
M Interface als Datentyp Java Basics - Anfänger-Themen 12
R Variablen Datentyp erst während Laufzeit festlegen Java Basics - Anfänger-Themen 6
1 Neuen Datentyp für rationale Zahlen als Klasse entwickeln Java Basics - Anfänger-Themen 20
R Datentypen Datentyp eines Werts in einer Textdateizeile abfragen und ändern Java Basics - Anfänger-Themen 4
R Interface Datentyp bei Erzeugung eines Objekts, dessen Klasse eine Schnittstelle implementiert Java Basics - Anfänger-Themen 18
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
V Datentypen Frage zum Datentyp Byte Java Basics - Anfänger-Themen 11
B datentyp in binär umwandeln Java Basics - Anfänger-Themen 5
S Primitiver Datentyp Short , Vorteil/Nachteil Betrachtung Java Basics - Anfänger-Themen 6
J Field auf Datentyp prüfen Java Basics - Anfänger-Themen 8
D Datentyp Object Java Basics - Anfänger-Themen 2
A Datentypen Mehrdimensionaler Datentyp gesucht Java Basics - Anfänger-Themen 4
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
F Klassenorganisation: Datentyp in Datentyp anlegen Java Basics - Anfänger-Themen 3
N Unerklärlich: Rekursiver Algorithmus gibt falschen Datentyp zurück... Java Basics - Anfänger-Themen 4
J Datentypen Was ist der Sinn vom Datentyp "char" ? Java Basics - Anfänger-Themen 11
G Eigener Autoboxing Datentyp Java Basics - Anfänger-Themen 3
Binary.Coder Welcher Datentyp für den Simplex Algorithmus Java Basics - Anfänger-Themen 3
Guybrush Threepwood Effizientester Datentyp zur Speicherung einer ungeordneten Menge von ints Java Basics - Anfänger-Themen 8
B Datentyp für +,-,*,/ Java Basics - Anfänger-Themen 5
D Datentypen Rekursiver Datentyp Java Basics - Anfänger-Themen 8
GianaSisters Auf Datentyp überprüfen Java Basics - Anfänger-Themen 13
W Datentypen Operatoren für eigenen Datentyp nutzen Java Basics - Anfänger-Themen 2
M Array mit komplexem Datentyp Java Basics - Anfänger-Themen 9
M 2 Arrays mit komplexen Datentyp vergleichen Java Basics - Anfänger-Themen 8
G Datentypen Welcher Datentyp Java Basics - Anfänger-Themen 2
F Datentypen Welchen Wert hat ein einfacher Datentyp nach der Deklaration? Java Basics - Anfänger-Themen 6
J Datentypen Datentyp für Datum Java Basics - Anfänger-Themen 23
B Java Bean, JSP, Komplexer Datentyp Java Basics - Anfänger-Themen 3
I Datentypen Eigener DatenTyp Java Basics - Anfänger-Themen 2
E Datentyp Array Java Basics - Anfänger-Themen 10
M Datentypen Eigenen Datentyp toArray() Java Basics - Anfänger-Themen 4
A Datentyp Char wird in BlueJ nur als leerer weißer Kasten dargestellt Java Basics - Anfänger-Themen 1
N Frage zu Datentyp byte Java Basics - Anfänger-Themen 14
F Datentyp Number???? Java Basics - Anfänger-Themen 2
A einlesen, schreiben, umwandlung datentyp Java Basics - Anfänger-Themen 10
A Datentyp mit String festlegen? Java Basics - Anfänger-Themen 13
D Generischer Datentyp Java Basics - Anfänger-Themen 2
D Datentyp: Liste von String->Double dingern Java Basics - Anfänger-Themen 4
K Datentyp vs. Datenstruktur - Unterschiede Java Basics - Anfänger-Themen 13
C Datentyp von einer Variablen ermitteln. Java Basics - Anfänger-Themen 12
M Datentyp Parameter Java Basics - Anfänger-Themen 18
R Welchen Datentyp verwenden? Java Basics - Anfänger-Themen 12
B Datentyp anlegen Java Basics - Anfänger-Themen 6
M Eigene Klasse mit "Enumeration"-Datentyp verknüpfe Java Basics - Anfänger-Themen 16
K Datentyp Problem Java Basics - Anfänger-Themen 2
X Rekursion & Generischer Datentyp Java Basics - Anfänger-Themen 11
A neuen Datentyp (Digit) definieren Java Basics - Anfänger-Themen 12
A Datentyp String in char umwandeln Java Basics - Anfänger-Themen 3
J datentyp -objectTyp Rückgabe Java Basics - Anfänger-Themen 2
D Superinterface als Datentyp Java Basics - Anfänger-Themen 5
E Generischer Datentyp und Arrays Java Basics - Anfänger-Themen 3
Z ArrayList<Entry<Datentyp, Integer>> ? Java Basics - Anfänger-Themen 12
L Datentyp Problem Java Basics - Anfänger-Themen 7
F Datentyp eines Inputs überprüfen Java Basics - Anfänger-Themen 2
NightmareVirus Datentyp des Arrayinhalt abfragen Java Basics - Anfänger-Themen 4
S Probleme mit Datentyp beim Einlesen Java Basics - Anfänger-Themen 4
C Datentyp byte Java Basics - Anfänger-Themen 22
G Java Problem [Datentyp] Java Basics - Anfänger-Themen 10
B Datentyp char -> Zeichen um einen Wert erhöhen Java Basics - Anfänger-Themen 12
M long Datentyp effizient mit Daten füllen Java Basics - Anfänger-Themen 2
S Datentyp aus 3 longs Java Basics - Anfänger-Themen 3
M datentyp ausfindig machen Java Basics - Anfänger-Themen 2
C Eigenen Datentyp schreiben Java Basics - Anfänger-Themen 13
T Probleme mit Datentyp Double Java Basics - Anfänger-Themen 4
W Datentyp Zahlen sortieren Java Basics - Anfänger-Themen 12
B Datentyp gesucht Java Basics - Anfänger-Themen 5
J Datentyp einer Klasse bei Anwendung von implements Java Basics - Anfänger-Themen 4
R Datentyp Ring - zyklisch doppelt verkettete Liste - HILFE! Java Basics - Anfänger-Themen 12

Ähnliche Java Themen

Neue Themen


Oben