2016-01-28 3 views
-2

У меня есть два класса и B, где я создаю объект класса B в классе в конструкторе, как показано ниже:Передача значений к другому классу

B obj; 
public A(){ 
    obj = new B(); 
} 

Мне нужна функция, например returnValue() в классе B где она должна отправить значения (int x & int y) в класс A (что создает объект B)

Есть ли способ сделать так: функция returnValue() должна отправить значения в класс A без выполнения вызова obj.returnValue().

Есть ли способ сделать это. Пожалуйста, помогите .. Спасибо ..

+0

Итак, вам нужен результат obj.returnValue(), чтобы правильно построить экземпляр A? – vektor

+0

непонятный. Пожалуйста, уточните, что вы хотите! Что такое x, y? В A() нет аргументов. Что вы пробовали до сих пор для B? – Gavriel

+0

Ваше описание повсюду. obj уйдет после завершения конструктора. – matt

ответ

3

Вам нужно разбить этот запутанный цикл зависимости. Например, вы могли бы передать B в конструктор, так что вы полностью построить B до создания экземпляра А.

B b = new B(); 
ReturnValue rv = b.returnValue(); // where rv contains x and y 
A = new A(b, rv.x, rv.y); 

где выглядит

public class A { 
    int x; 
    int y; 
    B b; 
    public A(B b, int x, int y) { 
     this.b = b; 
     this.x = x; 
     this.y = y; 
    } 
... 

Создание объектов в конструкторе может сделать это трудно проверить ваш код. Смотрите эту статью по вопросам тестируемости, Flaw: Constructor does Real Work:

Работа в конструкторе, такие как: создание/инициализации коллаборационистов, общаясь с другими службами, и логика создать свое собственное государство снимает швы, необходимые для тестирования, заставляющих подклассы/издеваются для наследования нежелательного поведения. Слишком много работы в конструкторе предотвращает создание экземпляров или изменение соавторов в тесте.

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