【发布时间】:2015-02-14 16:23:08
【问题描述】:
我想知道是否可以要求 java 方法参数是有限类型集中的任何类型。例如 - 我正在使用一个库,其中两个(或更多)类型具有公共方法,但它们在类型层次结构中的最低共同祖先是 Object。我的意思是:
public interface A {
void myMethod();
}
public interface B {
void myMethod();
}
...
public void useMyMethod(A a) {
// code duplication
}
public void useMyMethod(B b) {
// code duplication
}
我想避免代码重复。我想到的是这样的:
public void useMyMethod(A|B obj){
obj.myMethod();
}
java 中已经有类似的语法类型。例如:
try{
//fail
} catch (IllegalArgumentException | IllegalStateException e){
// use e safely here
}
显然这是不可能的。如何使用这种不可编辑的类型层次结构来实现设计良好的代码?
【问题讨论】:
-
由于您没有公共接口,您的编译器应该如何检查两个或多个类是否具有公共“接口”?问题还在于,根据程序代码,您定义为“重复”的代码不会重复,因为您有两个不同的类层次结构 - 代码看起来相同,但适用于完全不同的数据结构。
-
这在 Scala 中很容易,但这可能对您没有帮助。我所能建议的只是为一个实现另一个接口的接口(或实现相同接口的两个接口)制作一个包装器。
-
既然你已经将它标记为“设计模式”,那么适配器模式就会浮现在脑海中。但这需要您为每种类型编写一个包装器。如果不这样做,恐怕不会有一个静态类型安全的解决方案。至少,如果有的话,我会感到惊讶。
-
嘿@egelev,您是否发现任何有用的答案?如果是这样,请给作者一些荣誉并将其标记为已接受!谢谢。
标签: java design-patterns code-duplication