为具有类似方法的对象设计Java模式和避免if语句
我有两门课,例如A和B。
这些类有两个同名的getter/setter方法
现在,在代码中,我执行以下操作:
if(obj.getClassName().equals(A.class.getName())){
A a = (A) obj;
String result = a.getInfo();
}
else if(obj.getClassName().equals(B.class.getName())){
B a = (B) obj;
String result = a.getInfo();
}
我想知道是否有一种方法可以调用getInfo
来避免if语句
注意:我不能重构类来使用继承或其他方法
我只是想知道java中是否有避免if语句的技巧
# 1 楼答案
如果这是你想要达到的目标,请参考:this tutorial
# 2 楼答案
除非您想使用反射,否则不会。Java会将两种类型的方法(
getInfo()
)声明为完全独立的,使用完全独立的方法如果你有共同点,你应该使用一个共同的超类或共同的接口,它们都继承。您已经将问题标记为“设计模式”——该模式是使用该语言提供的工具来显示通用性
正如Eng.Fouad所显示的,使用
instanceof
无论如何都更简单,而且更好,因为这意味着您的代码仍然可以使用A
或B
的子类当然,你可以通过把它放在一个地方,或者用一个可以由
A
或B
构造的facade类,或者用一个方法执行这个检查,然后从多个地方调用它,来隔离这个丑陋# 3 楼答案
如果obj被声明为A或B,则可以使用重载方法。(对于类型安全性来说,这是一个很好的论据。)这里有一个测试可以说明这一点:
# 4 楼答案
如果您不能使用继承,并且希望避免
if
语句(即使使用instanceof
)。。。好最好的办法是将检查、强制转换和调用封装在一个函数中,以避免代码重复。。。否则就没办法了