Prüfen ob die Klasse existiert, ohne läuft in ClassNotFoundException

Um das planen der Ausführung eines Auftrags, bekomme ich den Namen der Klasse als string-Eingabe.

Diese Klasse kann in einem der zwei Pakete, aber ich weiß nicht, was man, so habe ich dies zu überprüfen.

Inzwischen habe ich zwei try-catch-Blöcke

Class<Job> clazz;
String className; //the above mentioned string, will be initialized

try {
    clazz = (Class<Job>) Class.forName("package.one." + className);
} catch (ClassNotFoundException ex) {
    try {
        clazz = (Class<Job>) Class.forName("package.two." + className);
    } catch (ClassNotFoundException ex1) {
      //some error handling code here, as the class is
      //in neither of the two packages
    }
}

Mehr Pakete diese erhalten hässlicher und mehr unlesbar wird. Darüber hinaus ist es - für mich - gegen das Konzept der Ausnahmen als Ausnahmen sollten nicht erwartet werden/verwendet für flow-control!

Gibt es eine Möglichkeit zu umschreiben, dass diese ohne die Nutzung der ClassNotFoundException?

  • warum nicht u eine Schleife verwenden, um zu überprüfen, jedes Paket mit einer Pause, wenn Sie nicht erreichen, Ausnahme?
  • oder Sie rufen rekursiv die gleiche Methode im catch-block mit einem anderen Klassennamen
  • dies ist nicht eine (vollständige) Lösung, denn er kann sein Interesse an einer Klasse, die innerhalb einer bestimmten Bibliothek. Wenn es einen Weg gibt, um eine Liste der geladenen Klassen in den Klassenpfad zur Laufzeit...
  • Warum können Sie nicht erwarten, dass vollständig qualifizierte Namen statt nur der name einer Klasse ?. Wer ist die Angabe von Klasse, Namen ? stattdessen können Sie pass vollständig qualifizierten Klassennamen Recht ?
  • der name der Klasse ist in einer Datenbank gespeichert und es ist kein kleines Projekt. möglicherweise haben viele Nebenwirkungen, zu wechseln, zu voll-qualifizierten Klassennamen
InformationsquelleAutor Basti M | 2013-11-06
Schreibe einen Kommentar