2017-02-15 3 views
0

Ich habe einige seltsame Requirment ich dynamisch eine Klasse laden müssen,Dynamische Klasse Laden in Java

hier habe ich ein Interface

public interface House 
    { 
     public Object loadHouseModel(String type); 
     public Object loadHouseSpace(String type); 
    } 

nun die gewünschte Klasse diese Schnittstelle

 public class DuplexHouse implements House 
    { 
     public Object loadHouseModel(String type) 
     { 
      ///Method body goes here 
     } 
     public Object loadHouseSpace(String type) 
     { 
      ///Method body goes here 
     } 
     } 
wird implementieren

Jetzt ist meine Anforderung, dass ich laden muss DuplexHouse oder was auch immer die Klasse, die House

01 implementiert

Anforderung ist, dass DuplexHouse Klassenname ich es von Eigenschaften erhalten werde und alles, was ich weiß, ist der Klassenname, den ich bekomme Implementieren Sie die House Schnittstelle. so sieht mein propertie wie diese type_house=xx.xx.xxx.DuplexHouse,xx.xx.xx.TruplexHouse,..etc

nach Art des Hauses Based ich laden müssen Haus Objekt

Also in meinem Hauptklasse Class cl = Class.forName(xx.xxx.xxx.DuplexHouse); Mein requirment ist, ich will House Instanz entspricht, die DuplexHouse hält intern Objekt Wie kann ich das tun ??

+2

Was müssen Sie mit dem 'Class' Objekt tun? Ist etwas, was Sie daran hindert, 'House House = new DuplexHouse()' zu instanziieren? –

+0

Verwenden Sie Generika für alles, was Interface-Verwendung implementiert wie 'ClassName ' – emotionlessbananas

+0

@TimBiegeleisen Ich kann 'House' mit 'DuplexHouse' nicht instanziieren, weil' DuplexHouse' nicht weiß, wann ich diesen Klassennamen von der Eigenschaft nehme. Alles, was ich weiß ist, dass 'DuplexHouse'' House' implementiert – Babel

Antwort

3

Zuerst tun Class.forName. Dies gibt Ihnen die DuplexHouse Klasse in Form von Class<?>. Tun Sie dazu newInstance(). Es wird Ihnen die Instanz DuplexHouse in Form einer Object geben. Werfen Sie diese auf House und Sie haben Ihre DuplexHouse Instanz in Form von House.

Dies setzt (1) die DuplexHouse-Klasse im Klassenpfad voraus (2) Der DuplexHouse-Konstruktor akzeptiert keine Argumente.

-1

@Babel Ich konnte Ihre Frage nicht ganz verstehen, aber Sie können überprüfen, ob ein Objekt eine Instanz einer Klasse oder Schnittstelle mit dem Schlüsselwort instanceof ist.

Zum Beispiel

boolean isLion = felineAnimal instanceof Lion boolean isWolf = canineAnimal instanceof Wolf