Cast ein Objekt der Klasse Typ als parameter übergeben

Habe ich eine übergeordnete Klasse und 2 Kind-Klassen. Ich bin versucht zu implementieren eine Funktion, die den Typ des Kindes und das Kind als Parameter.

Wenn ich child.newInstance() ich wollen speichern Sie in einer Variablen des Typs übergeben wird, und rufen Sie eine Funktion aus dem zweiten parameter.

Unten sind die Klassen

public class Parent {
    public void test() {
        System.out.println("Test from parent");
    }
}

public class ChildA extends Parent {
    public void testChildA() {
        System.out.println("Test from child a");
    }
}

public class ChildB extends Parent {
    public void testChildB() {
        System.out.println("Test from child b");
    }
}

und hier ist die Methode, die ich bin versucht zu implementieren

public class Driver {
    Parent func(Class child, String whichChild) throws Exception {
        //whichChild: "ChildA" or "ChildB"

        Object obj = child.newInstance();
        //cast obj to type of child and call the method "test" and "test" + whichChild
    }
}

Kann es sein das getan, was ich zu tun versuche? Wenn ja, wie kann ich den cast dieses Objekt auf den Typ übergeben wird?

  • Was willst du erreichen damit ? und warum gehst du nicht einfach überschreiben test in die Kinder?
  • Ich kann es nicht ändern, die Struktur der Klassen und ich kann Sie nicht überschreiben die Methoden, weil das Kind verschiedene Methoden der anderen Funktionen, die ich Hinzugefügt die super.test(); durch Fehler, sorry
  • Compile-time Sicherheit und statische Analyse sind sehr mächtige und nützliche Werkzeuge, wenn Sie mit Hilfe der reflection-API lösen Sie alle Vorteile, die Sie bieten. Sie werden nicht wissen, ob der code funktioniert, bis Sie es ausführen. Es wird nicht möglich sein, finden Verwendungen der Methoden-Aufruf per reflection. Auch IDE berichtet, dass Methoden, die nicht verwendet werden, die nicht wahr sein. Siehe Andy Turner ' s Antwort, was ist der beste Weg, so etwas zu tun.
  • können Sie fügen Sie zusätzliche abstrakte Methode in Parent Klasse?
  • Nein, ich kann nichts hinzufügen, die Parent Klasse
  • Ich denke, Sie konzentrieren sich auf eine falsche Sache - Sie versuchen, ein problem zu lösen, aber Sie sollte das beheben der Ursache statt. Können Sie uns mehr Kontext über das, was diese Klassen wirklich? Warum kannst du nicht ändern Parent? Wie sind die Child Klassen verwendet? Was stellen Sie dar?
  • wenn Parent erklärt wird, wie du es beschrieben hast, d.h. die Klasse ist nicht final, und mit test nicht deklariert final, es gibt nichts stoppen Sie das überschreiben test.
  • Im Grunde Parent - Klasse verfügt über 2 private Felder mit get-und Set-Methoden, denen ein Fehler-code und Fehler-text-und child-Klassen, die Sie erweitern können, haben andere private Felder mit get-und Set-Methoden können zusätzliche Daten. Sie werden verwendet für Antworten von Funktionen, ob Sie erfolgreich waren oder nicht, so zum Beispiel, wenn ich will ein Kind mit verdächtigen parameter, der gab ein Problem, ich würde verlängern müssen, die Parent - Klasse, und fügen Sie eine variable, um den verdächtigen variable
  • Es Klang wie der perfekte Ort für die Vererbung. Warum kannst du nicht ändern Parent Klasse?
  • Meine Funktionen sollten immer mit einem code und Fehler-text, so dass ich nur Hinzugefügt, diejenigen, die Parent Klasse, alle anderen Daten, die benötigt werden, für bestimmte Funktionen, die ist, warum gibt es Kinder, die Klassen mit den zusätzlichen Daten benötigt.
  • nur diejenigen, die Parent Klasse" - gut, das bedeutet, dass Sie es ändern können. So, jetzt die Vererbung verwenden, anstelle von Reflexionen.

Schreibe einen Kommentar