ERLEDIGT
NEIN
NEIN
ANTWORTEN
5
5
ZUGRIFFE
506
506
EMPFEHLEN
-
15.08.08 10:15 #1
- Registriert seit
- Sep 2007
- Beiträge
- 1
Ich möchte einen variablen Class-Cast durchführen, d.h. ich habe einen String s (z.B. "Long", "Integer" oder "Double") und ein Object o, welches ich in den variablen/ dynamischen Typ s casten will.
Also etwas in der Art:
Code :1
(Class.forName(s))o
Es soll aus dem Object o z.B. ein Long gecastet werden, ich weiß den Datentyp aber erst zur Laufzeit, muss daher einen variablen Cast durchführen.
Hat jemand eine Idee.
Gruß Thomas.
-
10.09.08 12:05 #2
Mit einem direkten Cast geht das meiner Meinung nach nicht.
Du kannst allerdings selbst den Konstruktor aufrufen.
In dem Beispiel die Klassen String und Double mit jeweils dem String-Konstruktor
Code :1 2 3 4 5 6 7 8 9
Class class1 = Class.forName("java.lang.String"); Constructor c1 = class1.getConstructor(Class.forName("java.lang.String")); Object obj1 = c1.newInstance("Hallo Welt"); System.out.println(obj1.getClass()); Class class2 = Class.forName("java.lang.Double"); Constructor c2 = class2.getConstructor(Class.forName("java.lang.String")); Object obj2 = c2.newInstance("123"); System.out.println(obj2.getClass());Denken gefärdet die Gewohnheit
-
There are 10 kind of people, those who understand binary and those who don't.
-
10.09.08 15:41 #4
Jo, instanceof geht auch.
Wenn man von sparen spricht, ist für instanceof evtl interessant, dass es für den Fall dass wenn so 90% der Fälle für instanceof die selbe Klasse liefert, ein einfacher cast auf die Klasse + exception fangen und dann andere casts testen performanter ist.Denken gefärdet die Gewohnheit
-
10.09.08 16:01 #5
- Registriert seit
- Jun 2002
- Ort
- Saarbrücken (Saarland)
- Beiträge
- 9.886
- Blog-Einträge
- 29
Hallo,
schau mal hier:
Code java:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
/** * */ package de.tutorials; /** * @author Thomas.Darimont * */ public class DynamicCastExample { /** * @param args */ public static void main(String[] args) { Object o = "1234"; double result = convert(o, Double.class); System.out.println(result); } private static <T> T convert(Object value, Class<T> to) { try { return to.cast(to.getDeclaredMethod("valueOf", new Class[] { String.class }).invoke(null, value.toString())); } catch (Exception e) { throw new RuntimeException(String.format( "Conversion from %s to %s failed", value.getClass(), to)); } } }
...wobei das hier viel mehr macht als nur casten. Der Wert wird nämlich konvertiert (wenn möglich)
Gruß TomJava rocks!
How to become a good Java Programmer?
Does IT in Java and .Net
The only valid measurement of code quality: WTFs / minute
Blog
Xing
Twitter
-
Magst recht haben...
Aber dann sieht der code so hässlich aus
Hauptsache man nimmt nicht so viele Strings...
besonders wenn man wie ich so ne kleine Rächtshcreibscheche hat, kann das schon sehr lange dauern die Ursache zu finden, wenn ein einfacher Tippfehler dein Programmverhalten ändert.
@thomas
In einem Grundlagenforum ist das ja schon ein wenig brutal.Code java:1
return to.cast(to.getDeclaredMethod("valueOf",new Class[] { String.class }).invoke(null, value.toString()));
Geändert von Andibert (10.09.08 um 16:15 Uhr)
There are 10 kind of people, those who understand binary and those who don't.
Ähnliche Themen
-
Cast Shadows beim Skylight deaktiviert
Von Skunky81 im Forum 3D Studio MaxAntworten: 0Letzter Beitrag: 24.07.10, 19:31 -
Hibernate Cast [Ljava.lang.Object; cannot be cast to Data.Data.TeilAufgabe
Von luigied im Forum JavaAntworten: 8Letzter Beitrag: 03.06.10, 22:09 -
Class Cast Exception bei javamail Mulitpart
Von Redmorris im Forum Java GrundlagenAntworten: 0Letzter Beitrag: 20.11.08, 13:14 -
Problem beim Einlesen von Variablen mit loadVariables
Von NeMeSiS1987 im Forum Flash PlattformAntworten: 3Letzter Beitrag: 11.12.07, 14:11 -
Cast String to Class?
Von fmacloud im Forum JavaAntworten: 3Letzter Beitrag: 18.07.07, 12:38





Zitieren

Login





