cast über string

Status
Nicht offen für weitere Antworten.

noisebreath

Bekanntes Mitglied
hi

kann ich irgendwie über nen string casten?
Pseudocode:
Code:
		Object zuCasten = new Integer(2);
		String CastTyp = new String("Integer");
		CastTyp b = (CastTyp)f;

vielleicht irgendwie in verbindung mit generic class/function?
Code:
public static  T unsecureCast(Object o) {
		return (T) o;
}
               //main
		String className = "Integer";
		Class a;
		a = Class.forName(className);
		Object anObj = a.newInstance();
		tes<className> b = new tes();

ehrlich keine ahnung ob das überhaupt möglich ist.
hat da jemand ne idee?

lg
noise
 
Nein, dies ist nicht möglich. Ich habe dies noch nie gebraucht und programmiere schon eine Weile Java. Was willst du genau machen und wieso benötigst du diese Möglichkeit zu casten.

Wenn du zur Laufzeit den Typ nicht kennst, kannst du auch keine Methoden ausser von Object aufrufen. Der Cast bringt dir also nichts.

Du kannst höchstens mit Reflection arbeiten, verlierst dabei aber die Typsicherheit.
 
du musst immer den kompletten Namen angeben
Java:
Class<?> c = Class.forName("java.lang.Integer");
Integer i = (Integer)c.newInstance();
wobei das hier nicht klappt da Integer keinen Standardkonstruktor hat...
 
Nein, dies ist nicht möglich.
Möööp...
Ich habe dies noch nie gebraucht und programmiere schon eine Weile Java.
Schade, kann mitunter ganz nützlich sein und wenn man per instanceof vorher nachprüft, auch nicht so unsicher.

Den Rest spar ich mir mal, bygones war schneller.

Gruß FatFire

Edit: Der Kommentar war eben aber noch nicht da, oder?
Wenn du zur Laufzeit den Typ nicht kennst, kannst du auch keine Methoden ausser von Object aufrufen.
Deswegen kann man ja auch zur Laufzeit den Typ bestimmen und casten. Selbst wenn Du die Klasse vorher noch nie gesehen hast, könntest Du Dir eine Auflistung der Methoden geben und welche davon ausführen...während der Laufzeit!
 
Zuletzt bearbeitet:
Vielleicht habe ich die Frage falsch verstanden, aber der Beispielcode lässt sich wirklich nicht so in Java realisieren.
("EinString")einObjekt
Ist nicht möglich...

Edit: Doch, der war da...
 
Kannst du im grösseren Zusammenhang erklären was du machen willst? Es gibt bestimmt eine Lösung.

Oder sieh dir das Kapitel über Reflection in der Insel an, danach weisst du was möglich ist (es geht einiges).
 
ja und wie soll das gehen? ich muss doch auch bei generics den Typ übergeben (???)
wie du anhand der Diskussion vll mitbekommen hast ist man sich nicht sicher zu wissen was du eigentlich nun machen willst....

du kannst ueber den klassenenamen dir Objekte eines Types erstellen, ein simples [c]MyObject o = ("MyObject")anyObject;[/c] geht nicht...
 
Meinst du sowas?
Java:
public static <T> T bla(Class<T> clazz, Object o) { 
  return clazz.cast(obj);
}
 
Wenn du nur die Klasse wissen willst, z.B. von Objekten, welche in einem Array sind, ist dies einfach und geht ohne Strings.

Class<?> c = objArr[0].getClass()

Du solltest noch auf null prüfen.
 
naja das ist mir klar, das war ja auch nur pseudo so ausgedrückt.

ich erläutere das ganze mal.

hypothetisches nicht unbedingt sinnvolles szenario: ^^

ich lese aus einem file und will einfach hintereinander die in dem File eingetragenen classen instantiieren.

inhalt file sieht pseudo z.B. so aus:
java.lang.Integer
java.fantasy.Fantasy
java.lang.String

meine Reflectionfunktion gibt mir nun instantiierte Objects zurück. Ich will nun aber nicht mit 1000 abfragen abfangen:
Code:
if instanceof String
String b = (String)getreflection(className);
if instanceof Integer
Integer b = (Integer )getreflection(className);
if instanceof Fantasy
Fantasy b= (Fantasy)getreflection(className);

Ich weiss ja nicht was für classes in meinem file drinstehen also kann ich unmöglich alle classes mit instanceof abfragen abdecken. Wollte wissen ob ich das IRGENDWIE umgehen kann...
 
Das ist so nicht möglich. Ist aber auch nur notwendig, wenn du andere Methoden als die Methoden von Object aufrufen willst. Dies könntest du mit Reflection machen.

Reflection ermöglicht es dir, wenn du ein Objekt hast und den Methodennamen (als String), die Methode aufzurufen.

Wenn du die Objekte anzeigen willst, z.B. in einer JTable, kannst du auf das toString von Object zurückgreifen oder besser auf den Operator '+'. Wenn du die Objekte speziell formatieren willst, kannst du (bei eigenen Klassen) toString überschreiben oder einen Renderer schreiben.

Was willst du mit den erzeugten Objekten machen?

Edit: Typos
 
Zuletzt bearbeitet:
funktionen der klassen ausführen. die stehen auch in dem file drin. ich weiss also z.b. das die Class Fantasy eine Funktion besitzt "kreiereFantasy();". aber die kann ich ja auf dem Object nicht aufrufen. das hat ja nur so funktionen wie getClass(),equals(),notify() etc. .. schade dass das nicht geht..
Danke dennoch für die vielen Teilnahmen an der Diskussion.

lg
noise
 
Einen gewissen Erwartungswert muss man natürlich schon haben, wenn man da irgendwas einliest. Einfach Klassen einlesen ohne zu wissen, was man eigentlich sucht und Methoden ausführen, ohne zu wissen, was diese eigentlich tun, macht in meinen Augen irgendwie keinen Sinn (kann zwar in Verbindung mit Random ganz lustig sein, aber Sinn?).
Schön ist sowas zum Beispiel, wenn Du eine eigene IDE schreibst...Klassen die Du nicht kennst und kannst trotzdem reinschnuppern und Dir die Methoden anschauen...ziemlich praktisch. Oder bei eigenen Programmen und fest abgemachten Interfaces ein Plugin-System aufbauen. Macht alles Sinn.

Komm doch mit einem etwas konkreteren Problem, dann können wir Dir sagen, was Sinn macht und wie man es umsetzen kann.

Gruß FatFire
 
Einfach Klassen einlesen ohne zu wissen, was man eigentlich sucht und Methoden ausführen, ohne zu wissen, was diese eigentlich tun, macht in meinen Augen irgendwie keinen Sinn (kann zwar in Verbindung mit Random ganz lustig sein, aber Sinn?).
Man stelle sich die unglaubliche sinnvolle & praktische Methode [c]public void createRandomError()[/c] vor, schon hat man einen realistischen Einsatzbereich, der mIllionen Java Entwicklern das schreiben von fehlerhaftem Code erspart...
 
Errors are not free, someone writes them and even gets paid for it 😉

(Hoffentlich hat das jetzt nicht zuviele Schreibfehler)

Es gibt natürlich Situationen, wo es sinnvoll ist, Klassen zu laden und Funktionen aufzurufen, welche in einem File definiert sind. Sieh dir an, wie Ant aufgebaut ist.
 
Es gibt natürlich Situationen, wo es sinnvoll ist, Klassen zu laden und Funktionen aufzurufen, welche in einem File definiert sind. Sieh dir an, wie Ant aufgebaut ist.
Das hab ich ja auch gar nicht behauptet, dass die Funktionalität keinen Sinn macht, aber das Ant-Vorbild würde in anderen Einsatzbereichen von Generics und Reflection eventuell total aufgeblasen wirken.

Gruß FatFire
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Zurück
Oben