InstantiationException auf einfache reflektierende Aufruf von newInstance der Klasse?
Ich habe eine abstrakte Klasse A, d.h.
public abstract class A {
private final Object o;
public A(Object o) {
this.o = o;
}
public int a() {
return 0;
}
public abstract int b();
}
Habe ich eine Unterklasse von B, d.h.
public class B extends A {
public B(Object o) {
super(o);
}
@Override
public int a() {
return 1;
}
@Override
public int b() {
return 2;
}
}
Ich bin mit dem ausführen des folgenden Stück code:
Constructor c = B.class.getDeclaredConstructor(Object.class);
B b = (B) c.newInstance(new Object());
und immer eine InstantiationException auf den Aufruf von newInstance, genauer gesagt:
java.lang.InstantiationException
at sun.reflect.InstantiationExceptionConstructorAccessorImpl.newInstance(InstantiationExceptionConstructorAccessorImpl.java:30)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
Ich weiß nicht, warum ich erhalte die Ausnahme. Ich habe mir einige andere ähnliche Fragen und Dinge gesehen, über die Verwendung von final-Variablen beim Aufruf des super-Konstruktors oder Probleme mit dem abstrakten Charakter der übergeordneten Klasse, aber ich konnte nicht finden eine definitive Antwort, warum diese Besondere situation wirft eine InstantiationException ein. Irgendwelche Ideen?
Meinst du weglassen
Woops ja sorry, bearbeitet.
Der code, den Sie eingefügt, funktioniert bei mir: ideone.com/0gCkp
Hmmm, Strippen es bis auf den blanken Knochen zu haben scheint, bekommen die Beseitigung der Fehler.
extends A
?Woops ja sorry, bearbeitet.
Der code, den Sie eingefügt, funktioniert bei mir: ideone.com/0gCkp
Hmmm, Strippen es bis auf den blanken Knochen zu haben scheint, bekommen die Beseitigung der Fehler.
InformationsquelleAutor mburke13 | 2011-10-25
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sind Sie sicher, dass B nicht definiert ist, mit der
abstract
keyword? Ich kann den Fehler reproduzieren, wenn ich die Klasse deklarieren alspublic abstract class B
.Genau das war mein Problem.. vielen Dank für das heads-up.
InformationsquelleAutor Brett Kail
Der newInstance () - Methode tatsächlich nicht alle args -- er nur löst das null-arg-Konstruktor. Sie wirft InstantiationException, wenn Ihre Klasse keinen Konstruktor mit null Parametern.
InformationsquelleAutor enkiv2