Dynamisches casten

Status
Nicht offen für weitere Antworten.

Alex04

Bekanntes Mitglied
Hallo,
ich würde gern wissen ob man in java dynamisch casten kann.
Warum zeig ich euch:

Diese Methode liest ein Objekt aus einem file (binär):

Java:
static public Object readBinaryFile(String pHandler, String pClass) throws Exception {
		Object lResult = null;
		if(!mMap.containsKey(pHandler)) {
			throw new Exception("Can not read binary-file for handler " + pHandler + " because handler does not exist!");
		}
		else {
			FileInputStream lFileInput = new FileInputStream(mMap.get(pHandler));
			ObjectInputStream lObjectInput = new ObjectInputStream(lFileInput);
			lResult = lObjectInput.readObject();
			
			lObjectInput.close();
			lFileInput.close();
		}

		return lResult;

	}

So in lResult ist also das gelesene Objekt vorhanden.
Problem ist, dass diese Methode von einer anderen Sprache aufgerufen wird in der es keine Castings gibt.
D.h. ich muss innerhalb dieser Methode casten und das richtige Objekt zurückliefern.
Um welche Klasse es sich handelt wird in dem Parameter pClass mit übergeben.

Ist sowas überhaupt möglich?
Also umgangssprachlich formuliert:
[Java]
pClass lErgebnis = (pClass) lResult;
[/code]

Natürlich muss die Methode auch entsprechend variable typen zurückgeben...

Wäre wirklich dankbar für eure Hilfe!

Mfg
Alex
 
B

bygones

Gast
Java:
@SuppressWarning("unchecked")
static public <T> T readBinaryFile(String pHandler, String pClass) throws Exception {
// code
return (T)lResult;
 

Atze

Top Contributor
biste dir sicher, bygones?
jetzt wird doch nicht anhand von pClass entschieden, welcher typ das ist, oder steh ich aufm schlauch?
müsste doch wenn dann

Java:
Class classDefinition = Class.forName(pClass);
Object object = classDefinition.newInstance();

static public <T> T readBinaryFile(String pHandler, T object) throws Exception {
// code
return (T)lResult;

heißen, aber dann müsste er den typ übergeben, so in der art? oder hab ich zuwenig geschlafen?? :D
 
S

SlaterB

Gast
der Typ richtet sich nach dem Wunsch des Aufrufers:

String test = loadObject(handler); // funktioniert allein mit <T>

String test = loadObject(handler, String.class);
String test = loadObject(handler, Integer.class); // ginge beides auch, aber unnötig, Parameter wird eh ignoriert

natürlich kann man auch voraussetzen dass der Parameter passt (Class<T>), aber das ist doch eher unnötig
 
B

bygones

Gast
hab mir die methode nicht richtig angeschaut... stimmt - der 2. Parameter ist dann nutzlos
 

Alex04

Bekanntes Mitglied
Jop, hätt ich vielleicht dazu sagen sollen, die Methode sieht so aus:

Java:
static public <T> T readBinaryFile(String pHandler) throws Exception {
.......
			lResult = lObjectInput.readObject();
			lObjectInput.close();
			lFileInput.close();
........

		return (T)lResult;

	}
 
Zuletzt bearbeitet:

Atze

Top Contributor
aber woher weiß der interpreter, was T ist??
ich hab gelernt, dass das einem übergebenen objekt bestimmt wird.

ich rall es einfach nicht :(
 
M

maki

Gast
aber woher weiß der interpreter, was T ist??
Für den "Interpreter", also JVM, ist jeder generische typ ein Object -> Type erasure

Der Compiler kann allerdings durch Type Inference feststellen, ob der Typ passt ;)
 

Atze

Top Contributor
ja, dass generics nur zur compilezeit feststehen ist schon klar, aber ich check den ablauf zur laufzeit nicht :(

wenn ich zur laufzeit (..., T object) mitgebe, weiß er durch T == T, dass er auch den selben typ zum cast nutzen soll. wenn ich aber nichts übergebe, und er bekommt nichts, woher weiß er dann, worauf gecastet werden soll?
 
M

maki

Gast
Java:
static public <T> T readBinaryFile(String pHandler) throws Exception
Dafür ist <T> da ;)
 
S

SlaterB

Gast
richtig erklären kann man das wohl zumindest mit einfachen Mitteln (ohne tiefe Regelwerke) nicht,
das <T> bedeutet, dass Java hier mal den Typ gut raten/ ableiten soll

Java:
public class Test
{
    static <T>T getT()
    {
        return null;
    }

    public String getString1()
    {
        String st = getT();  // geht
        return st;
    }

    public String getString2()
    {
        return getT(); // geht
    }

    public X getString3()
    {
        X x = new X(getT());  // geht leider nicht

        String st = getT();
        X y = new X(st);  // geht
    }

    class X
    {
        public X(String st) {}
    }
}
 

Atze

Top Contributor
jaaa, das sag ich doch, das T object (aus meiner Version) ist ja dort nicht drin und es funzt, aber wie, kann mir einer die "schritte" aufzeigen? :)

bei meiner version erkläre ich mir das so:

t object kommt zu laufzeit und er hat den typ
typ wird für die rückgabe verwendet

bei der anderen:
keine übergabe, keine information
wo kommt die info her, aus der zuweisung beim aufruf?

ich glaub steh wirklich auf dem schlauch. gibts da ne nachvollziehbare erklärung, oder muss ich das einfach so hinnehmen?

*danke@slater: ich nehm das dann mal so hin*

*Update*
neue frage, wie ruft man die methode auf? worauf weißt man sie zu, wenn man nichts übergibt?
bei meiner version bekomme ich das raus, was ich als 2 parameter reingebe (zb methode zum verarbeiten von versch. typen)

aber wem weißt man diese methode auf? object? :)

wäre "eure" lösung nicht vollkommen äquivalent zu:
Java:
static public Object readBinaryFile(String pHandler) throws Exception {
.......
            lResult = lObjectInput.readObject();
            lObjectInput.close();
            lFileInput.close();
........
 
        return lResult;
 
    }
???
dann kann ich auch auf die generics verzichten und er wäre am anfang
 
Zuletzt bearbeitet:
B

bygones

Gast
neue frage, wie ruft man die methode auf? worauf weißt man sie zu, wenn man nichts übergibt?
bei meiner version bekomme ich das raus, was ich als 2 parameter reingebe (zb methode zum verarbeiten von versch. typen)
man muss nix machen... java erledigt das - siehe Slaters bsp. Wenn ich das Ergebnis als String speicher ist T == String, wenn mans als Integer speicher T == INteger
 

Atze

Top Contributor
ok, also dann doch am aufruf, dann hab ich ja was handfestes :) danke bygones :)
aber gewonnen hab ich ja dadurch auch keine dynamik, da ich ja dann die zuweisung "hart codieren" muss, und damit die rückgabe festlege :) das problem ist damit nur verlagert, oder? hätte mir nur das casten gespart :)

*edit* ups, darum gings ja wohl! :) egal, wenns ihm hilft! :) hab nur nicht verstanden, dass es am aufruf stimmt wird. danke für eure infos :)
 
Zuletzt bearbeitet:
M

maki

Gast
ok, also dann doch am aufruf, dann hab ich ja was handfestes :) danke bygones :)
aber gewonnen hab ich ja dadurch auch keine dynamik, da ich ja dann die zuweisung "hart codieren" muss, und damit die rückgabe festlege :) das problem ist damit nur verlagert, oder? hätte mir nur das casten gespart :)
Nein, dynamisch ist es nicht, aber trotzdem sicherer als mit einem Cast, den bei einem Cast kann der Compiler nicht überprüfen ob das so auch geht ;)
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Klassen Dynamisches Casten? Java Basics - Anfänger-Themen 39
M Dynamisches Casten mal wieder Java Basics - Anfänger-Themen 4
B Generische Typen für dynamisches Formular Java Basics - Anfänger-Themen 3
J Dynamisches Array durch split()-Funktion? Java Basics - Anfänger-Themen 3
N Dynamisches Programmieren/Fibonacci Java Basics - Anfänger-Themen 1
J Polymorphie und Dynamisches Binden richtig nutzen Java Basics - Anfänger-Themen 11
O Schlange als dynamisches Feld - Aufwand Java Basics - Anfänger-Themen 16
S Klassen Objekt- Tabelle / Dynamisches 2Dimensionales Array für Objekte Java Basics - Anfänger-Themen 6
C Erste Schritte Dynamisches Array Java Basics - Anfänger-Themen 11
T Dynamisches abarbeiten von statischen Methode aus verschiedenen Klassen. Java Basics - Anfänger-Themen 5
X Methoden [GWT] Dynamisches Textfeld PopUp erstellen Java Basics - Anfänger-Themen 6
L dynamisches erzeugen von array Listen Java Basics - Anfänger-Themen 7
R dynamisches zweidimensionales Feld erzeugen Java Basics - Anfänger-Themen 8
A dynamisches Array - Index Liste Java Basics - Anfänger-Themen 2
maddin86 3 Dateien gleichzeitig speichern in dynamisches Benutzerverzeichnis (Windows) Java Basics - Anfänger-Themen 4
A dynamisches Array simulieren Java Basics - Anfänger-Themen 8
M Dynamisches und statisches binden Java Basics - Anfänger-Themen 17
M Dynamisches Binden Java Basics - Anfänger-Themen 8
M dynamisches Clipboard mit Buttons Java Basics - Anfänger-Themen 5
J Dynamisches/Statisches Binden ?? Java Basics - Anfänger-Themen 5
R dynamisches binden Java Basics - Anfänger-Themen 3
K dynamisches Array Java Basics - Anfänger-Themen 13
M Zweidimensionales dynamisches Array füllen Java Basics - Anfänger-Themen 2
Bernasconi dynamisches JDialog Java Basics - Anfänger-Themen 2
R Dynamisches Gegenerieren von Objekten Java Basics - Anfänger-Themen 25
P dynamisches Binden klappt nicht so recht Java Basics - Anfänger-Themen 7
S dynamisches array + konstruktor Java Basics - Anfänger-Themen 5
K dynamisches Array erzeugen Java Basics - Anfänger-Themen 5
tom.j85 TicTacToe - probleme beim Casten Java Basics - Anfänger-Themen 6
B Datentypen Welcher Typ wird beim Casten übernommen? Java Basics - Anfänger-Themen 12
G Probleme beim casten von double zu int Java Basics - Anfänger-Themen 3
BuTTerBroTHDx Char Wert in int casten ? Java Basics - Anfänger-Themen 4
A Vererbung Mit Casten direkt auf Sub-Klasse Zugreiffen Java Basics - Anfänger-Themen 6
N Variablen zurück casten Java Basics - Anfänger-Themen 3
F Casten bei Implements Java Basics - Anfänger-Themen 2
S Klassen casten, IS-A Beziehung Java Basics - Anfänger-Themen 5
J Generics casten Java Basics - Anfänger-Themen 14
T Probleme beim casten Java Basics - Anfänger-Themen 9
M Casten Java Basics - Anfänger-Themen 2
K Collections Vector zu String casten Java Basics - Anfänger-Themen 4
S Polymorphes Objekt in eigentliche Klasse casten Java Basics - Anfänger-Themen 6
masii Methoden Parameter casten? Java Basics - Anfänger-Themen 2
D Datentypen Abstrakter Datentyp lässt sich nicht casten Java Basics - Anfänger-Themen 7
U ArrayList casten Java Basics - Anfänger-Themen 37
F g.drawLine in g 2D casten Java Basics - Anfänger-Themen 5
A Klassen ArrayList richtig / sicher Casten? Java Basics - Anfänger-Themen 3
J Frage zu generischer Klasse und Casten Java Basics - Anfänger-Themen 14
M Frage zum Casten von Objekten Java Basics - Anfänger-Themen 5
M sicheres/unsicheres Casten bei Objekten Java Basics - Anfänger-Themen 13
D Object auf JTextpane / jTextArea casten? Java Basics - Anfänger-Themen 3
B Casten oder vielleicht was anderes? Java Basics - Anfänger-Themen 9
T Boolean in ein Objektdatentyp casten möglich? Java Basics - Anfänger-Themen 5
J Casten (Typumwandlung) Java Basics - Anfänger-Themen 12
P Casten Hash Map Java Basics - Anfänger-Themen 4
W Auf 'this' casten Java Basics - Anfänger-Themen 3
M casten Java Basics - Anfänger-Themen 11
D Casten eines Objekts: Funktion der Oberklasse aufrufen Java Basics - Anfänger-Themen 4
G Datentypen char to int casten - falsches Ergebnis! Java Basics - Anfänger-Themen 6
S casten array in int von float Java Basics - Anfänger-Themen 5
C Probleme beim casten und Objekt zugriff Java Basics - Anfänger-Themen 12
P Klasse nach Element casten Java Basics - Anfänger-Themen 4
G Double casten Java Basics - Anfänger-Themen 8
O Object nach Double casten Java Basics - Anfänger-Themen 11
L Object[] in String[] casten Java Basics - Anfänger-Themen 7
V Gelesene FTP Datei richtig casten Java Basics - Anfänger-Themen 9
T Properties casten Java Basics - Anfänger-Themen 4
G Arrays casten? Java Basics - Anfänger-Themen 12
G string "null" in null casten Java Basics - Anfänger-Themen 3
M casten und Generics Java Basics - Anfänger-Themen 9
S Objekt Casten Java Basics - Anfänger-Themen 4
G String nach int casten Java Basics - Anfänger-Themen 5
G Vektor auslesen und als int Variable casten Java Basics - Anfänger-Themen 4
G String in Date casten. Java Basics - Anfänger-Themen 7
G String in Date casten Java Basics - Anfänger-Themen 4
G String in Long casten Java Basics - Anfänger-Themen 2
G Object[] [] nach vector casten. Java Basics - Anfänger-Themen 3
G printStackTrace(); in String casten Java Basics - Anfänger-Themen 3
G String in int casten Java Basics - Anfänger-Themen 2
G Integer[] nach int[] casten - wie? Java Basics - Anfänger-Themen 2
D Arrays casten Java Basics - Anfänger-Themen 12
G Casten ? Java Basics - Anfänger-Themen 3
HaukeG Casten to String und Vergleichen Java Basics - Anfänger-Themen 2
G ich komm nicht weiter -> String in int casten Java Basics - Anfänger-Themen 4
T Casten von Choice auf Vector oder Object[] Java Basics - Anfänger-Themen 14
B Vector nach float[] casten Java Basics - Anfänger-Themen 6
G String zu byte[] "casten"? Java Basics - Anfänger-Themen 3
M Hin und Her Casten Object->int und int->Object Java Basics - Anfänger-Themen 3
T Typsicheres casten eines Objects Java Basics - Anfänger-Themen 5
D Object[] in Liste casten? Java Basics - Anfänger-Themen 8
T Chaosprogrammierer hat einen fehler beim casten? Java Basics - Anfänger-Themen 5
J Attribut casten Java Basics - Anfänger-Themen 3
A Array mit generischen Typen casten? Java Basics - Anfänger-Themen 6
C Automatisches Casten => inkompatibel Java Basics - Anfänger-Themen 7
G Byte-Code einlesen und zu Hex casten Java Basics - Anfänger-Themen 2
T Object[] zu String[] casten? Java Basics - Anfänger-Themen 3
R Double nach Integer casten Java Basics - Anfänger-Themen 8
L Adresse in String[] casten Java Basics - Anfänger-Themen 6
M Object auf Interface casten? Geht das? Java Basics - Anfänger-Themen 21
U ArrayLists und Casten Java Basics - Anfänger-Themen 2
O TreeMap nach Object[] casten? Java Basics - Anfänger-Themen 3

Ähnliche Java Themen

Neue Themen


Oben