请帮助我确定在以下情况下哪种方法合理。对象:
public class FunctionCall {
private String functionName;
private List<Exp> args;
...
}
在一个非常特殊的情况下/检查对象需要以某种方式识别。 可能的方法:
FunctionCall
类成为一个属性,但有人怀疑这会污染整体语义,因为该属性不应该是可见的&#34;全局&#34;。SpecialFunctionCall
继承FunctionCall
,instanceof
可以在非常特殊的情况下识别。这将是理想的,唯一的怀疑是它会滥用继承的目的吗?提前致谢。
答案 0 :(得分:1)
根据您的编写,似乎FunctionCall
对象只是一个带有数据的值对象,而不是一些评估自身并返回值的对象。对于多种类型的此类对象,您需要有一种方法来消除您正在使用的对象类型的歧义。
对于那部分,我可以建议您使用枚举来消除歧义,而不是使用instanceof
运算符或类反射。您也可以使用它创建漂亮的switch-case
命令。
public class FunctionCall {
// ...
public MyType getType() {
return MyType.BASIC_FUNCTION_CALL;
}
}
关于枚举的另一个好处是,它是一个可以拥有自己的字段的类。有一些final
字段用于枚举常量,放入描述它的某些特征的值,并且您可以在处理它的逻辑中使用此信息,这对您有利。
至于你问题的实际答案,对你的问题知之甚少是不可能的。在某些情况下,继承更好,在其他一些情况下,组合更好。在这两种情况下,某种界面都很好,它可以声明getType
方法。
答案 1 :(得分:0)
你真正需要的是使用Java的两个主要三个原则,polymorphism
和&#39;继承&#39;结合在一起。多态性是OOP功能之一,允许我们以不同的方式执行单个操作。这意味着可以根据特定情况或情况改变对象的行为。
在您的情况下,您可以创建两个类,FunctionCall
和SpecialFunctionCall
。后者应该extends
第一个具有一个特殊行为的人
然后当你的特殊情况出现时,你将使用第二类,它将具有与第一类不同的行为。
通过这种方式,您可以保证父类FunctionCall
具有每个案例的功能。
见下面的使用示例:
public class SpecialFunctionCall extends FunctionCall{
//your special logic goes here
...
}