Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

newInstance() Problem ...?!

Empfohlene Antworten

Veröffentlicht

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

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

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

    }

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

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.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.