Class zu Integer, String, Double etc.

Status
Nicht offen für weitere Antworten.
P

Pascal2005

Gast
Hi

ich habe ein Objekt

Code:
Class class;

diese wird mit so gesetzt:
Code:
class = Class.forName("java.lang.Integer");

Dies funktioniert auch alles prächtig.

Mein Problem ist es, dass ich später im Programm ein Object in einen String, Integer, Double, etc...
typecasten muss. Also der Integer oben in der forName Methode kann eigendlich ein beliebiger Datentyp sein oder ein Objekt.

Wie schaffe ich es aus dem Objekt class wieder den Integer herauszuholen,
damit ich später so
Code:
Integer wert = (Integer)object;
typecasten kann?

geht das?

Gruss Pascal
 

Mag1c

Top Contributor
Hi,

Nein! Hinter einem Objekt vom Typ "Class" steht die Klassen-(Typ-)definition. Das hat nichts mit einer Instanz des Typs zu tun. Deshalb kann man auch nicht einfach casten. Was hast du denn damit vor ? Man kann mit Holfe der Klassendefinition neue Instanzen des Typs anlegen. Dafür bräuchte man im Fall von Integer aber einen Wert.

Gruß
Mag1c
 

KSG9|sebastian

Top Contributor
Wenn dann so:

Code:
Class aClass = Class.forName(de.my.MyClass);
Object o = aClass.newInstance();


Integer casted = (Integer)o;
Vorraussetzung ist, dass die Klasse aClass auch von Integer erbt, sonst kriegst du ne ClassCastException
 

Mag1c

Top Contributor
Jo,

und wie ich bereits angedeutet habe, fällt er hier bereits mit der Klasse Integer auf die Nase, da diese Klasse keinen Default-Konstruktor besitzt. Damit erzeugt der .newInstance()-Aufruf eine InstantiationException :)

Edit: und erben kann man von Integer auch nicht, da die Klasse final ist.

Gruß
Mag1c
 
P

Pascal2005

Gast
ich habe ein File mit Methoden, Parametern und Rückgabewert

Dieses lese ich ein. Dann habe ich bei den Parametern die Datentypen (z.B. java.lang.Integer)

danach muss ich diese Methode, die in dem File steht aufrufen.
Die Parameter kann ich eingeben und darum brauche ich dann, für das aufrufen der Methode die richtigen Datentypen. Sonst bekomme ich eine Exception
 

Mag1c

Top Contributor
ein Beispiel:

Code:
String einParameter = "1";
Class integerClass = Class.forName("java.lang.Integer");
Constructor con = integerClass.getConstructor(new Class[]{java.lang.String.class});
Object obj = con.newInstance(new Object[]{einParameter});
Integer wert = (Integer)obj;

hier wird der Konstruktor Integer(String) aufgerufen und als Parameter
der Wert von "einParameter" übergeben.

Gruß
Mag1c
 
F

Flyer

Gast
Das Problem ist nun aber wie ich es dynamisch machen kann

ich mein wenn es jetzt anstatt ein Integer ein String ist...oder Double...
 
P

Pascal2005

Gast
also ich meine das Problem ist die 5te Linie...

kann ich das Integer irgendwie ersetze so das es auf alle Datentypen zutrifft...also das es auch Double oder String sein könnte...das ist mein Problem!

Weil es möglich ist das es zahlreiche verschiedene Datentypen gibt und ich nicht alle hartkodieren will.
 

Bleiglanz

Gesperrter Benutzer
Code:
// hier kenn ich nur den String? komisch
class = Class.forName("java.lang.Integer");

// etwas später:
// oha, jetzt will ich den Klassennamen als Literal im Quelltext haben
Integer wert = (Integer)object;
mal wieder dieses Problem:

ES GEHT NICHT!

wenn du nur einen "String" hast, dann kannst du das erzeugte Objekt mit NIEMALS in das "richtige" Objekt casten, es gibt keine dynamischen "Casts"

einzige Ausnahme ist es, wenn du eine endliche Liste von möglichen Klassennamen hast, dann kannst du das in einem switch machen
 

Mag1c

Top Contributor
Moin,

es geht alles ! :) Nur eben etwas anders.

Mal vorausgesetzt, für alle deine Datentypen gibt es Konstruktoren, die ein solches Objekt aus einem String konstruieren (also new Integer("1") oder new Double("1.1") oder new String("Text")). Dann kannst du, genau wie oben in meinem Beispiel, jeden Parameter, den du über die Tastatur eingegeben hast, in den entsprechenden Datentyp umwandeln. Da das ganze aber dynamisch ist, mußt du die alle als Object behandeln.

An dieser Stelle wolltest du nun dynamisch einen Typcast machen und die entsprechende Methode aufrufen (wie das gehen soll, hast du sicher auch noch nicht herausgefunden ;) )

Der Trick ist, daß du den Methodenaufruf genauso machst, wie das mit dem Konstruktor (siehe oben). Analog gibt es nämlich auch eine getMethod(...)-Methode.

Hier noch das Beispiel von oben erweitert ohne Kommentar. Einfach mal mit rumspielen:

Code:
public class MyClass {
    public void doIt ( Integer val ) {
        System.out.println(val);
    }
}

...

String einParameter = "1";
Class integerClass = Class.forName("java.lang.Integer");
Constructor con = integerClass.getConstructor(new Class[]{java.lang.String.class});
Object obj = con.newInstance(new Object[]{einParameter});

MyClass myObj = new MyClass();
Method mth = myObj.getClass().getMethod("doIt", new Class[]{java.lang.Integer.class});
mth.invoke(myObj, new Object[]{obj});

Gruß
Mag1c
 

Sky

Top Contributor
Verbesserungsvorschlag:

Verwende in Zeile 15 an stelle von "java.lang.Integer.class" die Class, die Du in Zeile 10 erstellt hast
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D NoClassDefFoundError: Could not initialize class Allgemeine Java-Themen 0
J Class to link Java Allgemeine Java-Themen 4
C Was passt hier nicht bei der Calendar-Class Allgemeine Java-Themen 2
E Class.getResourceAsStream() gibt null zurück Allgemeine Java-Themen 2
Erwin82a Object cannot be converted to Custom Class in Lampda Expression Allgemeine Java-Themen 2
T Java Robot Class - Bot Allgemeine Java-Themen 3
S Class File Editor -> Source not found Allgemeine Java-Themen 4
G javafx "class path" exception Allgemeine Java-Themen 5
S Java class direved from inner class Allgemeine Java-Themen 6
S Inner Class Allgemeine Java-Themen 11
K Wildcard und class type Allgemeine Java-Themen 9
M Java model class ? Allgemeine Java-Themen 9
Thallius Ist meine static Helper Class Thread save? Allgemeine Java-Themen 9
S class path resource [config.properties}] cannot be opened because it does not exist Allgemeine Java-Themen 4
J Reflection Aufruf: .class durch .dll ersetzen Allgemeine Java-Themen 4
T Compiler-Fehler NoClassDefFoundError beim Laden einer Class Allgemeine Java-Themen 11
J Class Decompile als String (Procyon) Allgemeine Java-Themen 2
H Class 'java.io.BuferedReader' is not present in JRE Emulation Libary | GWT Fehler?! Allgemeine Java-Themen 0
I Datentypen String in class sicher verwahren Allgemeine Java-Themen 17
R Dynimc Class Loading Allgemeine Java-Themen 5
J Inner class + Leer-Konstruktor Allgemeine Java-Themen 1
Neumi5694 Methoden Generic: Rückgabetyp als Class-Parameter übergeben Allgemeine Java-Themen 3
D Collections.sort funktioniert nicht in exportierten .class Dateien Allgemeine Java-Themen 10
V Eclipse .class Dateien Allgemeine Java-Themen 9
KeexZDeveoper Von .class zu .java Allgemeine Java-Themen 7
N Wo ist Object.class ? Allgemeine Java-Themen 0
K Nicht alle class-Dateien im JRE? Allgemeine Java-Themen 2
M *.class Files ausführen Allgemeine Java-Themen 2
L Klassen Nested Class In Nested Class Allgemeine Java-Themen 3
perlenfischer1984 Dialect class not found exception Allgemeine Java-Themen 15
Tort-E Manifest Main-Class Allgemeine Java-Themen 8
I JSoup Class auslesen Allgemeine Java-Themen 1
K Generic class und Reflection Allgemeine Java-Themen 2
R .class Datei in .jar austauschen Allgemeine Java-Themen 2
R Java .class-File-Konstrunkt mit Programm visualisieren Allgemeine Java-Themen 18
A main-class Not found Allgemeine Java-Themen 3
T Java Class Intrumentation mit Annotations in Laufzeit Allgemeine Java-Themen 1
N Per Reflection auf (method) local inner class zugreifen? Allgemeine Java-Themen 3
P JDK installieren Error: Could not find or load main class HelloWorld.java Allgemeine Java-Themen 3
B public class JarFilter extends FileFilter « Falsch? Allgemeine Java-Themen 4
D Object nach Vererbung mit Class Object überprüfen Allgemeine Java-Themen 4
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
F java.lang.ClassNotFoundException: .class Allgemeine Java-Themen 5
T InvalidClassException - Read null attempting to read class descriptor for object Allgemeine Java-Themen 8
Phash Can't find Main Class Allgemeine Java-Themen 4
B Erste Schritte Plugin erkennen und Class Dateien anzeigen lassen Allgemeine Java-Themen 3
B json zu java class Allgemeine Java-Themen 2
antonbracke Aus Jar eine Class laden und damit arbeiten! Allgemeine Java-Themen 5
D Class<CAP#1> statt Class<...> Allgemeine Java-Themen 5
T Class-Objekt mit URLClassloader Allgemeine Java-Themen 7
A Class Datei aus Verzeichnis über URLClassLoader laden Allgemeine Java-Themen 2
L Class Files , Methode .delete() Allgemeine Java-Themen 13
E NetBeans warning: [options] bootstrap class path not set in conjunction with -source 1.6 Allgemeine Java-Themen 4
X Could not find the main class programm will exit (textdokument) Allgemeine Java-Themen 3
S Could not find the main class Allgemeine Java-Themen 7
B Mal wieder "Could not find the main class" Allgemeine Java-Themen 3
B Variable class in java.lang.Object Allgemeine Java-Themen 11
C Could not find the main class. Allgemeine Java-Themen 15
S Klassen .jar - eine .class datei ändern? Allgemeine Java-Themen 23
A Could not find main class: start Allgemeine Java-Themen 5
S main() class finden Allgemeine Java-Themen 7
hdi Could not find main class? Allgemeine Java-Themen 8
R Warum Class.forName(); Allgemeine Java-Themen 7
C class.class angefordert ? Allgemeine Java-Themen 2
S Methoden Class.forName() >> Methoden - Reihenfolge Allgemeine Java-Themen 5
B Test$1.class mit dem javac compiler Allgemeine Java-Themen 7
G jar Datei findet Main Class nicht... Allgemeine Java-Themen 2
P Java Editor Could not find the main class GUI. Programm will exit. Allgemeine Java-Themen 3
D class Datei einlesen Allgemeine Java-Themen 4
T Interface > Abstract > Class Allgemeine Java-Themen 11
TheDarkRose Subversion .class Dateien auch commiten? Allgemeine Java-Themen 3
D API - Beispiel + static member in inner (non static) class Allgemeine Java-Themen 2
E String name in class convertieren Allgemeine Java-Themen 4
F Änderung in .jar bzw. .class vornehmen ? Allgemeine Java-Themen 18
H2SO3- bestimmte class immer mit 1.4 compilieren Allgemeine Java-Themen 5
B class dateien "einlesen" und objekte erzeugen Allgemeine Java-Themen 6
G Unterschied MyClass.class vs this Allgemeine Java-Themen 2
S mit Class eine Klasse nur einmal instantiieren Allgemeine Java-Themen 4
Sonecc Zugriff auf Class File einer anderen Jar während der Laufzeit Allgemeine Java-Themen 2
M Klasse aus xyz.class Datei laden / package entfernen? Allgemeine Java-Themen 4
BattleMaster246 Could not find the Main class Allgemeine Java-Themen 30
N class Task extends TimerTask ohne Blockieren Allgemeine Java-Themen 15
H .class in .java umwandeln Allgemeine Java-Themen 3
T class.newinstance + try/catch-konstruktor Allgemeine Java-Themen 6
X Cannot refer to a non-final variable settings inside an inner class defined in a different method Allgemeine Java-Themen 4
J Class.forName und CLASSPATH -Problem Allgemeine Java-Themen 5
T Class-files zur Laufzeit zu Reflection-Zwecken laden Allgemeine Java-Themen 18
G Thread in Methode oder in inner class Allgemeine Java-Themen 3
woezelmann referenz der outer class aus static nested class heraus Allgemeine Java-Themen 7
reibi Main-Class in Jarfile Allgemeine Java-Themen 3
E Timer class macht einfach garnichts :/ Allgemeine Java-Themen 6
D Class.forName Allgemeine Java-Themen 2
S Class RGB Farbe Allgemeine Java-Themen 2
S JavaDoc aus .class Datei extrahieren Allgemeine Java-Themen 5
mongole Class.class.getResource(...) Allgemeine Java-Themen 10
N Probleme mit .jar 'Could not find main class' Allgemeine Java-Themen 3
T Class Not Found Exception beim import von Paket Allgemeine Java-Themen 2
G Abstract class Stillfrage Allgemeine Java-Themen 4
P Class Casting: Graphics/Graphics2D Allgemeine Java-Themen 7
H2SO3- abstract class mit Beispielen in abstracten Methoden Allgemeine Java-Themen 5

Ähnliche Java Themen

Neue Themen


Oben