Veröffentlicht 1. November 200222 j hallo.. ich will meine classen dynamisch vererben.. dazu erzeuge ich ein newInsance Object.. try { Class c = Class.forName("package.Classe"); Object o = c.newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } [/PHP] o ist Instanciert.. das funzt.. will ich jetzt aber o an meine ander Methode die mit [PHP] andereMethode anMeth = new andereMethode(this,true,o); übergeben dann bekomme ich einen fehler: package/Menue.java [123:1] cannot resolve symbol symbol : constructor andereMethode (package.Menue,boolean,java.lang.Object) location: class package.andereMethode andereMethode anMeth = new andereMethode(this,true,o); ^ 1 error [/PHP] andereMethode steht so im konstrucktor: [PHP] public andereMethode(java.awt.Frame parent, boolean modal, Stamm Stadat) { } schreibe ich aber andereMethode anMeth = new andereMethode(this,true,new Classe()); [/PHP] dann geht das.. noch was zu Stamm Stamm wird folgendermaßen instanziert: [PHP] public abstract class Stamm { ... variablen ... public Stamm() { } } wie übergebe ich nun dynamisch eine classe an andereMethode???
3. November 200222 j Originally posted by mamamia hallo.. ich will meine classen dynamisch vererben.. dazu erzeuge ich ein newInsance Object.. try { Class c = Class.forName("package.Classe"); Object o = c.newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } [/PHP] [/b] anstatt Object o lieber Stamm o. oder nich? bigredeyes
3. November 200222 j @bigredeyes: anstatt Object o lieber Stamm o. oder nich? Nein, newInstance() liefert ein Object. @mamamia Was willst Du genau machen? Eine Klasse dynamisch laden und davon eine bekannte Methode aufrufen? Wenn ja, hier ein Beispiel: import java.lang.reflect.*; [...] public Object callMethod (URLClassLoader urlClassLoader, String className, String methodenName, Object[] parameter) throws Throwable { Class RunMe = urlClassLoader.loadClass(className); // Create a new instance Object o = RunMe.newInstance(); Class[] parameterTypen = new Class[parameter.length]; // Parametertypen werden zum Auffinden der Methode benötigt: for (int i = 0; i < parameterTypen.length; i++) { parameterTypen[i] = parameter[i].getClass(); } Method methode = null; try { methode = RunMe.getDeclaredMethod(methodenName, parameterTypen); } catch (Exception ex) { Logger.add(this.getClass(), ex); return null; } try { return methode.invoke(o, parameter); } catch (Exception ex) { Logger.add(this.getClass(), ex); } return null; }
4. November 200222 j Originally posted by mamamia hallo.. ich will meine classen dynamisch vererben.. dazu erzeuge ich ein newInsance Object.. try { Class c = Class.forName("package.Classe"); Object o = c.newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } [/PHP] o ist Instanciert.. das funzt.. will ich jetzt aber o an meine ander Methode die mit [PHP] andereMethode anMeth = new andereMethode(this,true,o); übergeben dann bekomme ich einen fehler: package/Menue.java [123:1] cannot resolve symbol symbol : constructor andereMethode (package.Menue,boolean,java.lang.Object) location: class package.andereMethode andereMethode anMeth = new andereMethode(this,true,o); ^ 1 error [/PHP] andereMethode steht so im konstrucktor: [PHP] public andereMethode(java.awt.Frame parent, boolean modal, Stamm Stadat) { } schreibe ich aber andereMethode anMeth = new andereMethode(this,true,new Classe()); [/PHP] dann geht das.. noch was zu Stamm Stamm wird folgendermaßen instanziert: [PHP] public abstract class Stamm { ... variablen ... public Stamm() { } } wie übergebe ich nun dynamisch eine classe an andereMethode??? Hmmm eine Instanz der Klasse "Classe" hast du ja. Warum macht du dann nicht einfach einen cast nach Classe, weil das steckt ja letztendlich in Object o drin , wie ich das verstehe. Des weiteren kannst du keine Instanzen von Stamm erzeugen, da "Stamm" abstrakt ist und es können keine Instanzen von abstrakten Klassen erzeugt werden. Es ist des weiteren kein Konstruktor der Form: andereMethode( ... , ... , Classe definiert) deswegen geht das auch nicht. Was bedeutet dynamisch vererben, das höre ist zum erstenmal. Du willst du dynamisch anhand des vollqualifizierten Klassennamens laden. Ich würde vorschlagen du liest mal etwas länger in "Java in a Nutshell" und überlegst was du wirklich willst und sortiert erstmal deine Gedanken. Frank
4. November 200222 j Originally posted by mamamia hallo.. ich will meine classen dynamisch vererben.. dazu erzeuge ich ein newInsance Object.. try { Class c = Class.forName("package.Classe"); Object o = c.newInstance(); } catch (ClassNotFoundException e) { } catch (InstantiationException e) { } catch (IllegalAccessException e) { } [/PHP] o ist Instanciert.. das funzt.. will ich jetzt aber o an meine ander Methode die mit [PHP] andereMethode anMeth = new andereMethode(this,true,o); übergeben dann bekomme ich einen fehler: package/Menue.java [123:1] cannot resolve symbol symbol : constructor andereMethode (package.Menue,boolean,java.lang.Object) location: class package.andereMethode andereMethode anMeth = new andereMethode(this,true,o); ^ 1 error [/PHP] andereMethode steht so im konstrucktor: [PHP] public andereMethode(java.awt.Frame parent, boolean modal, Stamm Stadat) { } schreibe ich aber andereMethode anMeth = new andereMethode(this,true,new Classe()); [/PHP] dann geht das.. noch was zu Stamm Stamm wird folgendermaßen instanziert: [PHP] public abstract class Stamm { ... variablen ... public Stamm() { } } wie übergebe ich nun dynamisch eine classe an andereMethode??? Der Compiler sagt dir doch auch den Fehler: andereMethode - Konstruktor ist so definiert: public andereMethode(java.awt.Frame parent, boolean modal, Stamm Stadat) du übergibst aber als ersten Parameter für Parent ein "this" was laut Compiler vom Typ package.Menue ist und das kann er nicht auflösen ... jedenfalls sagt er das mal. Klingelt es jetzt ? Frank
Archiv
Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.