在转换为兄弟类时,JAVA避免重复代码

时间:2016-02-16 09:38:46

标签: java inheritance code-duplication

我有2个Java类A和B;它们都扩展了另一个Java类,例如C.在另一个类中,我有一个C类对象,作为方法的参数传递,我必须使用这个对象(使用适当的强制转换)来设置A和B的字段,例如:

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类中,因为它被其他不需要它们的类扩展。

3 个答案:

答案 0 :(得分:1)

编程接口。

让所有类通过接口实现,然后使用接口类型alter on。

如果条件

,您最终会得到如下代码
 yourInterfaceInstance.setField(fieldVar);

答案 1 :(得分:0)

你可以将你的方法拆分为另外两个方法,一个接受A类对象,另一个接受B类。如果你需要太多而无法传播对象,因为C不适合。如果为A类方法(interfaceA)定义接口,为B类集合方法定义接口(比如InterfaceB),那应该很棒。因此,在新方法中,您可以通过接口传递对象,并且您的代码将是可扩展的。例如:

void methodThatWorkWithA(InterfaceA obj) {
  obj.setFieldA1(someValue);
}
对于B级来说同样如此。

答案 2 :(得分:0)

你可以使用界面的概念。

A类扩展C {}

B类扩展C {}

C类实现StackOverFlow {}

interface StackOverFlow { }

班级考试{

// StackOverFlow.setField(field); }