Reflection

Herli

Mitglied
Hallo Jungs ich hab ein Problem und zwar folgendes:

In einer Klasse muss ich ein Objekt einer Klasse erzeugen, das erst zur Laufzeit feststeht. Dies macht man ja in etwa so:
Code:
        import strategien.*;
        ......
        ......
         try {
            Class c = Class.forName(this.strat1);
            Object o = c.newInstance();
              ((Strategie)o).sagWas();
         }
         catch(ClassNotFoundException e) {
           System.out.println("Klasse nicht gefunden!");
         }
         catch(InstantiationException e){
           System.out.println(e.toString());
         }
         catch(IllegalAccessException e){
           System.out.println(e.toString());
         }
so weit so gut.

strat1 ist ein String zum Beipsiel Abwechselnd2. Strategie ein Interface.
Eigentlich vergleichbar wie bei diesem Beispiel hier: (Listing4301)

Allerdings liegt bei mir das Interface Strategie und all die Klassen (von der eine zur Laufzeit instanziert wird) in einem Package strategien - also eine Verzeichnisebene drunter:

Code:
package strategien;

public interface Strategie {

         public void sagWas();
}

eine Klasse die dann möglicherweise instanziert werden soll sieht dann in etwa so aus:
Code:
package strategien;

public class Abwechselnd2
implements Strategie{

        public void sagWas(){
          System.out.println("Hallo - ich bin A2");
        }
}
Irgendwie findet er aber die Klasse nicht. Er wirft jedesmal eine ClassNotFoundException... Kann mir da jemand weiterhelfen?
 
Zuletzt bearbeitet:
Hallo,

die Class.forName() Methode erwartet einen vollqualifizierten Klassennamen. In Deinem Fall wäre das "strategien.Abwechselnd2".
 
Zurück