2016-02-16 5 views
1

У меня есть 2 класса Java A и B; они оба расширяют другой Java-класс, например, C. Внутри другого класса У меня есть объект класса C, который передается в качестве аргумента метода, и я должен использовать этот объект (с соответствующим броском), чтобы установить поля А и В, такие как:JAVA избегать дублирования кода при литье в классы родства

if(C instanceof A){ 
    ((A)C).setAField1(AField1); 
    ... 
    ((A)C).setAFieldN(AFieldN); 
}else if (C instanceof B){ 
    ((B)C).setBField1(BField1); 
    ... 
    ((B)C).setBFieldN(BFieldN); 
} 

У меня для установки тех же полей, у меня есть те же вызовы методам setter, но я должен делать разные трансляции. Что мне нужно сделать, чтобы избежать повторений кода?

PS: Я не могу поместить эти поля в класс C, потому что он расширен другими классами, которые им не нужны.

ответ

1

Программирование на интерфейс.

Позвольте всем вашим классам реализовать через интерфейс, а затем использовать тип интерфейса.

Вы в конечном итоге с кодом, как показано ниже с нет, если условия

yourInterfaceInstance.setField(fieldVar); 
+0

Без использования интерфейсов повторение кода - единственный способ? – MarCorte

0

Вы можете разделить ваш метод 2 других методов, один, который принимает объект класса А, и еще один, воспринмаемых класса B. Если вам нужно слишком много, чтобы опускать, возможно, передать объект, поскольку C не подходит. Это должно быть здорово, если вы определяете интерфейс для методов класса A (interfaceA) и один для методов набора классов B (скажем, InterfaceB). Таким образом, в ваших новых методах вы можете передавать объекты по интерфейсу, и ваш код будет расширяемым. Например:

void methodThatWorkWithA(InterfaceA obj) { 
    obj.setFieldA1(someValue); 
} 

же для класса В.

0

U может использовать концепцию интерфейса.

Класс А продолжается C {}

класс В расширяет C {}

класс С реализует Stackoverflow {}

интерфейс Stackoverflow { }

Класс испытаний {

// StackOverFlow.setField (поле); }

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