2015-05-21 6 views
0

У меня есть абстрактный класс контроллера, который расширяет Mainpage .Также я не могу делать какие-либо изменения в MainPage .Its не редактируемыеПолучить объект абстрактного класса в другом классе

public abstract class Controller extends MainPage { 
    public Controller(Remote remor) throws UnsuppoOSException, PException {  
      super(remor);   

    } 
    } 

MainPage класс

public abstract class MainPage implements IPageObject { 
    public Remote mDriver; 
    public MainPage(Remote driver) throws PException { 
     if (driver == null) 
      throw new NullPointerException("Cannot initialize with null driver"); 
     this.mDriver = driver;  
    } 
} 

Что мне нужно - это получить объект контроллера и использовать его в другом классе FactoryIndo

Для этого я расширил класс контроллера.

public abstract class FactoryIndo extends Controller { 
    public static Remote mDriver; 

    public FactoryIndo(Remote remor) throws UnsuppoOSException, PException { 
     super(remor); 
     mDriver = remor; 
    } 

public List<TestContext> getBrowserTestContext(List<String> browsers) 
     throws Exception { 
    Map<String, Object> browserMap = new HashMap<String, Object>(); 
    browserMap.put(MasterConstants.BROWSER, this); // HERE am passing the object of Controller 
    TestContext testContext = new TestContext(browser, browserMap); 
    return testContext; 
} 

    public static List<TestContext> getTestContext(List<String> browsers) 
      throws Exception { 
     FactoryIndo instanceSel = new FactoryIndo(mDriver); 
     List<TestContext> contexts = instanceSel 
       .getBrowserTestContext(browsers); 
     return contexts; 
    } 
} 

При вызове этого метода getTestContext в другом классе am get Невозможно инициализировать нулевым драйвером. Что не так с моим кодом. Кроме того, без расширения класса Контроллер является любым возможным способом получить объект этого в классе FactoryIndo

+1

Это потому, что getTestContext является статическим, и когда она инициализируется mDriver равна нулю. –

+0

Класс контроллера является абстрактным классом, и он не может быть создан, а не создание экземпляра может быть анонимным подклассом экземпляра контроллера таким образом: Controller control = new Controller() {}; в вашем классе FactoryIndo. –

+0

Я не могу сделать это..coz в родительском mainclass нет такого конструктора .. – Psl

ответ

1

Это потому, что getTestContext статичен, а когда он инициализируется, mDriver имеет значение NULL. Вы должны сначала присвоить значение mDriver перед вызовом

FactoryIndo instanceSel = new FactoryIndo(mDriver); 

EDIT: Что-то вроде этого

public static List<TestContext> getTestContext(List<String> browsers) 
     throws Exception { 
    mDriver = //Your code goes here 
    FactoryIndo instanceSel = new FactoryIndo(mDriver); 
    List<TestContext> contexts = instanceSel 
      .getBrowserTestContext(browsers); 
    return contexts; 
} 
+0

как я могу присвоить значения mDriver.where, который я могу назначить? – Psl

+0

также любые другие способы получить объект класса Controller в FactoryIndo – Psl

+0

Пожалуйста, ответьте ......... :-) – Psl

Смежные вопросы