Zum Inhalt springen

newInstance() Problem ...?!


mamamia

Empfohlene Beiträge

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???

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

@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;

    }

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

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

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...