我有两个不同packages
同名的文件,在某些函数中,我需要检查传递的参数是否属于哪个类instanceof
。
例如。
if(input instanceof x.y.test) {
//do something
} else if(input instanceof x.y.z test) {
//do something
}
但在很多地方,我读到使用instanceof
不是一个好的做法。我可以在这里申请什么样的替代方案。
注意:一个文件是.groovy
文件,另一个是.java
文件,但两者都代表同一个域
说"实例是一种不好的做法"有点笼统的说法。这取决于要求,技术限制,个人品味等。
但是,这是值得考虑的一点。有时这意味着有人错过了使用多态性的机会。例如,如果您的代码显示
if (input instanceof x.y.test){
greeting = "hello from xy";
}
else if (input instanceof x.y.z.test){
greeting = "hello from xyz";
}
那么如果每个"测试"都有一个方法"greet()"可能会更好:
greeting = input.greet();
// where class x.y.test has public String greet(){return "hello from xy";}
// and class x.y.z.test has public String greet(){return "hello from xyz";}
我说可能,因为它有一个强大的优势:人们现在可以添加许多其他"测试"实现,你的主代码将无缝地接受它们,而不必添加"if-else"。
但是,它也可能有缺点:如果您觉得您的"测试"类负责问候计算是错误的;或者如果它是您无法控制的第三方。这就是为什么我反对一概而论。
还有更精细的解决方案 - 例如查找">访问者"设计模式。