我有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类中,因为它被其他不需要它们的类扩展。
答案 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); }