klasse dynamisch laden
-
aber das problem ist das ich RoundingPolicy.isAssingnableFrom nicht aufrufen kann.
-
[java]
RoundingPolicy.class.isAssignableFrom[/code][ Dieser Beitrag wurde am 18.04.2003 um 11:48 Uhr von Gregor editiert. ]
-
bekomme folgende fehlermeldung
*** Rebuild started.
: cannot resolve symbol
symbol : method isAssingnableFrom (java.lang.Class)
location: class java.lang.Class
if(RoundingPolicy.class.isAssingnableFrom(aClass)){
^
1 error
*** Compiler reported errors
-
Hmmm... komisch! Ich sehe den Fehler nicht. Zeig mal etwas mehr Code. Welchen Java-Compiler nutzt du?
-
also hier wird die klasse geladen und falls der typ falsch ist möchte ich das er eine fehlermeldung ausgibt (z.b. messagebox oder so)
ich habe es jetzt so abgeändert das er mir eine classcastException wirft.
public static RoundingPolicy Load(File file){//throws Exception{ FileClassLoader mLoader; try{ mLoader = new FileClassLoader(file); Class aClass = mLoader.loadClass(file); //Hier würde ich gerne abfragen ob der Typ stimmt und falls nicht den default //Klasse zuweisen return (RoundingPolicy)aClass.newInstance(); }catch(IOException e){ System.err.println(e.toString()); }catch(ClassCastException e){ System.err.println(e.toString()); }catch(InstantiationException e){ System.err.println(e.toString()); }catch(IllegalAccessException e){ System.err.println(e.toString()); }catch(Exception e){ System.err.println(e.toString()); } return null; } }
hab mal noch ne andere frage und zwar
würde ich gerne auf diese exceptions reagieren d.h. wenn eine falsche klasse geladen wurde, dass er dann automatisch den Defaultwert wählt. Ist es angebracht diese zu weisung im catch abschnitt zu machen.
-
Hab den Fehler:
isAssingnableFrom
...da ist ein "n" zu viel drin!
-
Original erstellt von <hi>:
**
hab mal noch ne andere frage und zwar
würde ich gerne auf diese exceptions reagieren d.h. wenn eine falsche klasse geladen wurde, dass er dann automatisch den Defaultwert wählt. Ist es angebracht diese zu weisung im catch abschnitt zu machen.**Naja: Auf Exceptions reagierst du im catch-Block, oder vielleicht rufst du von da auch ne Methode auf, die auf die Exception reagiert.
Allerdings sind Exceptions kein Werkzeug, um den Fluss des Programms zu steuern. Es sind Ausnahmen. Man sollte sein Programm so programmieren, dass normalerweise garkeine Exceptions auftreten.
-
Original erstellt von Gregor:
**Hab den Fehler:isAssingnableFrom
...da ist ein "n" zu viel drin! :)**
BTW: Tipp:
Hol dir eine IDE wie Eclipse. Wenn Eclipse so einen Fehler findet, dann macht es selbstständig Vorschläge, wie der Fehler behoben werden kann. Da kann man dann mit einem Click ein Pop-Up-Menu mit möglichen Ausbesserungen öffnen. In diesem Fall hätte das Pop-Up-Menu nur einen Eintrag:
Change to 'isAssignableFrom(..)'
Das verringert die Zeit, die man durch solche Flüchtigkeitsfehler verliert, doch ganz erheblich!
[ Dieser Beitrag wurde am 18.04.2003 um 11:58 Uhr von Gregor editiert. ]
-
ja ich arbeite mit together. und dort ist es normalerweise so das wenn man ein punkt setzt automatisch eine auswahl kommt und das ist hier eben nicht der fall.
darum stimmt auch etwas anderes nicht
-
Allerdings sind Exceptions kein Werkzeug, um den Fluss des Programms zu steuern. Es sind Ausnahmen. Man sollte sein Programm so programmieren, dass normalerweise garkeine Exceptions auftreten.
aber wenn eine falsche klasse geladen wird dann muss man darauf reagieren und eine default wert laden
-
Original erstellt von <hi>:
**
darum stimmt auch etwas anderes nicht**Inwiefern? Gibt es immernoch ne Fehlermeldung, oder denkst du, dass etwas mit deiner IDE nicht stimmt?
-
hast recht jetzt klappts
aber kannst du mir mal erklären wieso man RoundingPolicy.class.* schreiben muss wieso noch das class dazwischen . ich hätte jetzt eher das ganze nach Class gecastet.
-
Original erstellt von <hi>:
**
aber kannst du mir mal erklären wieso man RoundingPolicy.class.* schreiben muss wieso noch das class dazwischen . ich hätte jetzt eher das ganze nach Class gecastet.**RoundingPolicy ist eine Klasse. Du brauchst aber keine Klasse, sondern ein Objekt der Klasse Class, welches die Klasse RoundingPolicy repräsentiert. Das liefert dir das ".class" zurück.
...und casten geht nicht, weil du nur bei Objekten casten kannst, RoundingPolicy ist aber eine Klasse.
...verwirrend!
-
hab jetzt das ganze mal mit dem jbuilder probiert. Dort zeigt er es mir an was ich auswählen kann. ja das mit dem class ist schon etwas verwirrend
wäre mir logischer wenn es irgend ein getclass wäre (aber ist halt kein objekt).
das mit dem casten hast du natürlich vollkommen recht. geht nur auf objekte
-
Original erstellt von <hi>:
**
wäre mir logischer wenn es irgend ein getclass wäre**Wenn du ein Objekt der Klasse hättest, dann hättest du eine Methode "getClass()" zur Verfügung. ...aber ohne Objekt geht das nicht.