tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
5
ZUGRIFFE
506
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Thomas_Schuetz79 Thomas_Schuetz79 ist offline Grünschnabel
    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.
     

  2. #2
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    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

  3. #3
    Andibert Andibert ist offline Mitglied Silber
    Registriert seit
    Sep 2006
    Ort
    Hildesheim
    Beiträge
    90
    du könntes auch mit instanceof arbeiten:

    Code java:
    1
    2
    3
    4
    5
    
    if(o instanceof Long){
     Long l = (Long) o;
     ...
    }else if (o instanceof Integer){
     ....

    so sparst du dir den string.
     
    There are 10 kind of people, those who understand binary and those who don't.

  4. #4
    Avatar von Franz Degenhardt
    Franz Degenhardt Franz Degenhardt ist offline Mitglied Brokat
    Registriert seit
    Mar 2004
    Ort
    Köln
    Beiträge
    378
    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

  5. #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ß Tom
     
    Java 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

  6. #6
    Andibert Andibert ist offline Mitglied Silber
    Registriert seit
    Sep 2006
    Ort
    Hildesheim
    Beiträge
    90
    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
    Code java:
    1
    
    return to.cast(to.getDeclaredMethod("valueOf",new Class[] { String.class }).invoke(null, value.toString()));
    In einem Grundlagenforum ist das ja schon ein wenig brutal.
    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

  1. Cast Shadows beim Skylight deaktiviert
    Von Skunky81 im Forum 3D Studio Max
    Antworten: 0
    Letzter Beitrag: 24.07.10, 19:31
  2. Antworten: 8
    Letzter Beitrag: 03.06.10, 22:09
  3. Class Cast Exception bei javamail Mulitpart
    Von Redmorris im Forum Java Grundlagen
    Antworten: 0
    Letzter Beitrag: 20.11.08, 13:14
  4. Problem beim Einlesen von Variablen mit loadVariables
    Von NeMeSiS1987 im Forum Flash Plattform
    Antworten: 3
    Letzter Beitrag: 11.12.07, 14:11
  5. Cast String to Class?
    Von fmacloud im Forum Java
    Antworten: 3
    Letzter Beitrag: 18.07.07, 12:38