2017-02-15 2 views
0

У меня есть некоторые странные Requirment мне нужно загрузить класс динамически,Динамическая нагрузка класса в Java

здесь у меня есть Interface

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

теперь нужный класс будет реализовывать этот интерфейс

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

Теперь мое требование состоит в том, что мне нужно загрузить DuplexHouse или что бы то ни было, класс, который реализует House

Требование - это то, что имя класса DuplexHouse. Я получу его из свойств и все, что я знаю. Имя класса, которое я получаю, будет реализовывать интерфейс House. поэтому мои СВОЙСТВА выглядит следующим образом type_house=xx.xx.xxx.DuplexHouse,xx.xx.xx.TruplexHouse,..etc

На основе типа дома, мне нужно загрузить соответствующий объект дома

Так что в моем главном классе Class cl = Class.forName(xx.xxx.xxx.DuplexHouse); Моего Requirment, я хочу House экземпляра, который внутренне держит DuplexHouse объекта Как я могу это сделать ??

+2

Что вам нужно сделать с объектом 'Class'? Что-то мешает вам просто создать экземпляр «House house = new DuplexHouse()»? –

+0

использовать дженерики для всего, что реализует использование интерфейса, например 'ClassName ' – emotionlessbananas

+0

@TimBiegeleisen Я не могу создать экземпляр 'House' с' DuplexHouse', потому что 'DuplexHouse' не знает, что я беру это имя класса из свойства. Все, что я знаю, это то, что 'DuplexHouse' реализует' House' – Babel

ответ

3

Первая сделать Class.forName. Это даст вам класс DuplexHouse в виде Class<?>. На этом сделаем newInstance(). Он даст вам пример DuplexHouse в форме Object. Отбросьте это до House, и у вас есть свой экземпляр DuplexHouse в виде House.

Это предполагает, что (1) класс DuplexHouse входит в путь класса (2) Конструктор DuplexHouse принимает нулевые аргументы.

-1

@Babel Я не мог понять ваш вопрос, но вы можете проверить, является ли объект экземпляром любого класса или интерфейса с ключевым словом instanceof.

Например

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