Anzeige:
Ergebnis 1 bis 4 von 4

Thema: dynamisch Casten

  1. #1
    AlexNet
    Gast

    dynamisch Casten

    Hello alle zusammen.
    Ich möchte mich gleich bevor ich zu meinem Problem komme für die kommenden Beiträge im Voraus bedanken . Vielen Dank

    Mein Problem liegt daran das ich erst zur Laufzeit erfahre auf welchen (Java)Type ein Object gekastet werden muss, bevor dieses an eine Methode übegeben wird.
    Leider fand ich bis jetzt nichts passendes.
    Ein Beitrag zu diesem Thema habe ich in diesem Forum schon gelesen doch kann damit nichts anfangen.
    Geändert von AlexNet (25-05-2006 um 15:38 Uhr)

  2. #2
    Registrierter Benutzer Avatar von Qudus
    Registriert seit
    14.03.2005
    Beiträge
    101
    Stichwort "Java Reflections"

    Versuch mal Folgendes (nicht getestet, reine Theorie):

    Code:
    ClassX x = new ClassX();
    
    ClassA a = new ClassA();
    ClassB b = new ClassB();
    ClassC c = new ClassC();
    
    xyz.method1(x.getClass().cast(a);
    xyz.method2(x.getClass().cast(b);
    xyz.method3(x.getClass().cast(c);
    oder:

    Code:
    xyz.method1(x.getClass().cast(a.getClass());
    xyz.method2(x.getClass().cast(b.getClass());
    xyz.method3(x.getClass().cast(c.getClass());
    Es fällt mir allerdings schwer, ein Szenario zu entwerfen. Vielleicht wäre ein Code-Auszug aus deinem Programm ganz hilfreich. Anhand welcher Bedingungen willst Du denn entscheiden, in welchen Typ gecastet werden soll?

    Gruß, Qudus
    Geändert von Qudus (25-05-2006 um 16:19 Uhr)
    http://forceusers.de/, DIE deutsche Star Wars Themen-Seite.

    ASUS A8V Deluxe; Athlon 64 3000+ (S939); 1GB Dual Channel Speicher; ATI Radeo 9800 Pro; SATA 200 GB; NEC ND-1300A DVD-Brenner; LG 40x CD-Brenner

    Mandriva 2006 Official; Kernel 2.6.12-12mdk; XOrg 6.8.2; Java 1.5.0 Update 6

  3. #3
    Registrierter Benutzer Avatar von mwanaheri
    Registriert seit
    28.10.2003
    Ort
    Bayreuth
    Beiträge
    569
    Mir fallen da zwei Möglichkeiten ein, die allerdings beide voraussetzen, dass nur ein bestimmer Satz von Objekttypen kommen kann:
    1) verzweigung.
    mit .getClass kannst du ja abfragen, um welche Klasse es sich handelt, also kannst du auch danach verzweigen, z.B. if (o.getClass == Klasse.class)

    2) Überladung
    Du kannst eine Methode schreiben, die die Umwandlung vornimmt und diese überladen, indem du unterschiedliche Klassen als Parameter angibst.
    Das Ziel ist das Ziel.

  4. #4
    AlexNet
    Gast
    Sorry, eine Problembeschreibung ist natürlich eine sinvolle Sache.

    Ich versuche das Konzept der Objektorientierung nachzuprogrammieren.
    Dazu habe ich unter anderem eine Klasse die bei mir MyObject heißt angelegt.
    Diese muss Werte beliebiger Attribute entgegennehmen können und weiter leiten.
    Da es natürlich am Anfang noch garnicht bekannt ist um welchen Datentyp es sich handeln wird nehme ich ein Objecttype entgegen.
    Dieser muss dann aber in den Ursprungszustand konvertiert werden.
    Die Name der Klasse zu erfahren ist nicht all zu schwär das stimmt.

    Doch wie führe ich Casting zu Laufzeit dürch???

    Aber danke für den Tipp zu "Java Reflections" habe was nachgeschaut und vollgendes gefunden. Am besten gebe ich hier ein Beispiel an. Sieh doch dazu
    Das Onlinebuch Javainsel4 unter dem Link:

    http://www.galileocomputing.de/openb...0001D41F032100

    Ich habe es zwar noch nicht ausprobiert in meinem Program doch hoffe das es klappt. Ich werde dann mich auf jeden Fall zurückmelden
    Also vielen Dank noch einmal.

    Code Auszug:

    public class MyObject extends CXMLify {

    public static HashMap objectDct = new HashMap();
    private HashMap valueDic = new HashMap();
    private MyClass objectType;
    private int id;
    private int refCounter = 0;
    private String hasOwner;

    public MyObject(MyClass objectType){

    this.objectType = objectType;
    this.id = getID();
    this.refCounter = 0;
    this.hasOwner = "False";
    MyObject.objectDct.put(this.get_id(), this);// eigenes Object in objectDct hinzufügen

    // Object der Klasse Attr hollen
    Iterator it = this.objectType.AttrDic.entrySet().iterator();
    while (it.hasNext()) {
    Map.Entry entry = (Map.Entry)it.next();
    String key = entry.getKey().toString();
    String name = entry.getValue().toString();
    try{
    Object o = entry.getValue().getClass().newInstance();
    if( ((Attr)o).defaultValue.equals("None") ){
    this.set_value(key, ((Attr)o).defaultValue);
    }
    } catch (ClassCastException e) {
    System.out.println(e.toString());
    } catch (InstantiationException e) {
    System.out.println(e.toString());
    } catch (IllegalAccessException e) {
    System.out.println(e.toString());
    }
    }
    }

    public void set_value(String key, Object value){
    Attr attr = (Attr)this.objectType.get_attr(key);
    this.valueDic.put(key, new Value(attr,value));
    }
    Geändert von AlexNet (25-05-2006 um 18:43 Uhr)

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •