Dynamisch getypte Klasseninstanz?

T

tuxedo

Gast
Hallo,

hab ein kleines Problem. Ich hab eine Methode deren Argument unter anderem eine Klasse ist.

In der Methode möchte ich die Klasse benutzen um eine typisierte Instanz einer Hilfsklasse zu erzeugen. Nur irgendwie bin ich zu doof. Kann mich mal einer in die richtige Richtung weisen? Oder geht das gar nicht?

Exemplarisch hier mal die Methode, aufs kleinste reduziert:

Java:
    public void create(Class<?> type)  {

        // ....                
        MyService<type> service= new MyService<type>();
        // ....

    }

Any ideas?
 
S

SlaterB

Gast
Java:
public class Test {
    public static void main(String[] args)   {
        MyService<Double> m;
        m = create(); // funktioniert
        m = create(Double.class);  // funktioniert
        doit(m); // sowieso
        doit(create()); // funktioniert leider nicht
        doit(create(Double.class));  // funktioniert
    }
    static void doit(MyService<Double> service)  { }

    static <T extends Number>MyService<T> create(Class<T> c) {
        return new MyService<T>();
    }
    static <T extends Number>MyService<T> create() {
        return new MyService(); // evtl. suppressWarning nötig, aber ist ok
    }
}
class MyService<T extends Number> {}
 

Marco13

Top Contributor
Mit
Java:
    static <T extends Number> void doit(MyService<T> service)  { }
funktioniert (oder zumindest: compiliert ;)) auch [c]doit(create());[/c]
 
T

tuxedo

Gast
Okay, auf mein Beispiel bezogen wäre das dann also
Java:
 public <T> MyService<T> create(Class<T> type)  {

        // ....                
        MyService<T> service= new MyService<T>();
        // ....
        return service;
    }

Gut, das frisst der Compiler.

Das zurückgegebene service Objekt sollte nun getyped sein.
In diesem Service-Objekt gibts nun Methoden die den Type verwenden sollen:

Java:
public void myMethod(T something) {
        // ....
}

Ich hätte jetzt erwartet dass ich da nur den Typ reinstecken darf, mit dem ich die Klasse getyped habe. Aber ich kann da alles reinstecken und der compiler nimmt's mir ab ???:L
 
S

SlaterB

Gast
ohne Code (komplett ohne wichtige ... mit main-Methode) nimmt dir Compiler SlaterB dafür gar nix ab
 
T

tuxedo

Gast
Java:
public class TestGenericType {
    
    static class TestObject {
        public String msg;
        public int i;

        @Override
        public String toString() {
            return msg+"-"+i;
        }

    }

    static class TypedClass<T> {

        private T myT;

        public void myTypedMethod(T typedObject) {
            System.out.println("myTypedMethod argument: "+typedObject.getClass().getName());
            myT = typedObject;
        }

    }

    public static <T> TypedClass<T> createTypedObject(Class<T> type) {
        return new TypedClass<T>();
    }

    public static void main(String[] args) {

        TypedClass myTypedObject = createTypedObject(TestObject.class);

        TestObject tm = new TestObject();
        tm.i=1234;
        tm.msg="HelloWorld";

        myTypedObject.myTypedMethod(new String("Hallo Welt")); // warum geht das?
        myTypedObject.myTypedMethod(tm); // nur das hier sollte gehen



    }

}

Hab schon ne dumpfe vermutung warum das nicht geht ...
Muss das aber erst noch testen.

- Alex

[update]

Ich glaub das Stichwort heisst type erasure?!

Hatte in meiner Anwendung ganz übersehen das erzeugte Service-Objekt mit nem Type zu versehen. Ich hatte zwar den Type beim erzeugen angegeben, aber die Membervariable war nicht getyped. Ergo konnte ich alles reinfüttern.

- Alex
 
Zuletzt bearbeitet von einem Moderator:
S

SlaterB

Gast
deine Vermutung vorweggenommen:

> TypedClass myTypedObject = createTypedObject(TestObject.class);

myTypedObject ist nicht typisiert,
du müßtest
TypedClass<TestObject> myTypedObject = ..
schreiben
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Jemand einen Tipp wie man ein Javafx-Hintergrund "dynamisch" macht Allgemeine Java-Themen 3
E RMI FWH: RMI- Wie erstelle ich stubs dynamisch, bzw. unterdrücke eine Statisch-Warnung? Allgemeine Java-Themen 0
S Maven Jars dynamisch laden / Plugin-Struktur erstellen Allgemeine Java-Themen 14
T Statisch und dynamisch Allgemeine Java-Themen 1
MiMa Variableninhalte dynamisch abfragen Allgemeine Java-Themen 12
D Methode dynamisch aufrufen Allgemeine Java-Themen 2
S Externe Eclipse Projekte dynamisch einbinden Allgemeine Java-Themen 3
Thallius Externe .jar dynamisch einbinden Allgemeine Java-Themen 5
C Erste Schritte Baumstruktur (dynamisch) Allgemeine Java-Themen 9
F JTree: Nodes dynamisch anlegen via LinkedHashMap Allgemeine Java-Themen 2
B Reflection, invoke dynamisch befüllen Allgemeine Java-Themen 3
M Klassen Klasse Dynamisch laden und Konstruktor aufrufen Allgemeine Java-Themen 1
J rxtxserial.dll für 32 oder 64bit dynamisch einbinden Allgemeine Java-Themen 9
F Dynamisch ein Objekt einer bestimmten Subklasse erstellen Allgemeine Java-Themen 7
W Dateinamen dynamisch Parsen Allgemeine Java-Themen 12
T Classpath Klassen dynamisch erstellen Allgemeine Java-Themen 4
F Schlüsselworte Einstellungen dynamisch deserialisieren Allgemeine Java-Themen 5
S LaTeX Code in dynamisch erzeugten PDF's Allgemeine Java-Themen 8
X Dynamisch Konstruktor aufrufen Allgemeine Java-Themen 12
hdi Ressourcen dynamisch zur Laufzeit laden Allgemeine Java-Themen 15
A Klassen dynamisch aus jar-datei laden Allgemeine Java-Themen 5
J instanceof vermeiden und stattdessen dynamisch binden Allgemeine Java-Themen 6
M Konstruktoraufruf dynamisch auswerten und SQL bauen Allgemeine Java-Themen 10
E Variable dynamisch ausgeben Allgemeine Java-Themen 5
Tandibur pattern dynamisch vorkompilieren Allgemeine Java-Themen 9
T Objekt dynamisch neu erstellen/ austauschen Allgemeine Java-Themen 9
H getText(); bei dynamisch generierten JTextFiled Allgemeine Java-Themen 2
F Wie erfahre ich dynamisch den namen eines aktuellen Objektes Allgemeine Java-Themen 2
S Asymmetrisches Array dynamisch erzeugen Allgemeine Java-Themen 4
T Objekte dynamisch über eine Methode erzeugen Allgemeine Java-Themen 10
R Object Dynamisch erzeugen (Reflection API) Allgemeine Java-Themen 22
P RTF dynamisch machen (IText, Swing) Allgemeine Java-Themen 4
B Listener dynamisch setzen Allgemeine Java-Themen 6
P Klasse Dynamisch laden und zurückgeben Allgemeine Java-Themen 17
P Array Dynamisch vergrößern Allgemeine Java-Themen 7
B objekt einer klasse dynamisch erzeugen Allgemeine Java-Themen 6
G Objekt dynamisch erstellen und Inhalte kopieren Allgemeine Java-Themen 6
C Dynamisch Objekte unterschiedlicher Typen erzeugen Allgemeine Java-Themen 6
D Klassen dynamisch laden Allgemeine Java-Themen 5
E Arrays -> dynamisch Allgemeine Java-Themen 21
K Methoden dynamisch erstellen Allgemeine Java-Themen 12
P Dynamisch casten - möglich? wie? Allgemeine Java-Themen 5
T Klassen dynamisch ausführen Allgemeine Java-Themen 3
N Graphische Oberfläche dynamisch erweitern möglich? Allgemeine Java-Themen 4
B Absolute Paf einer Klasse in dieser dynamisch auslesen? Allgemeine Java-Themen 5
K Klasse dynamisch casten Allgemeine Java-Themen 14
Reeny Dynamisch Klassen kompilieren Allgemeine Java-Themen 5
G JDO Dynamisch ? Allgemeine Java-Themen 2
H Objekte m. versch. Interf. dynamisch erzeugen Allgemeine Java-Themen 11
E Klasse dynamisch über main-Methode aufrufen Allgemeine Java-Themen 9
D Strings dynamisch füllen Allgemeine Java-Themen 5
A Dynamisch Attribute hinzufügen Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben