Java 使用 instanceof 检查不同包中具有相同名称的类



我有两个不同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"。
但是,它也可能有缺点:如果您觉得您的"测试"类负责问候计算是错误的;或者如果它是您无法控制的第三方。这就是为什么我反对一概而论。

还有更精细的解决方案 - 例如查找">访问者"设计模式。

最新更新