我正在尝试在我的项目中做同样的事情,但似乎没有任何优雅的方式可以做到这一点。问题是通用接口方法的所有不同版本都具有相同的名称,并且可以将相同的参数应用于它们。至少如果您正在使用子类,并且不能保证您不会,它不会编译。至少这是我认为正在发生的事情。
class Fraction extends Number{
...
}
GenericInteface <T> {
void method(T a);
}
NumberInterface extends GenericInteface <Number>{
}
FractionInterface extends GenericInteface <Fraction>{
}
ClassWithBoth implements NumberInterface, FractionInterface{
void method(Number a){
}
void method(Fraction a){
}}
在这个例子中,如果调用 ClassWithBoth 的方法命名方法,参数是分数,它必须从方法 2 中选择,两者都可以作为分数也是数字。做这样的事情是愚蠢的,但不能保证人们不会这样做,而且如果他们这样做 java 将不知道该怎么做。
我想出的“解决方案”是像这样重命名函数。
class Fraction extends Number{
...
}
GenericInteface <T> {
void method(T a);
}
NumberInterface {
void numberMethod(Number a);
}
FractionInterface {
void fractionMethod(Fraction a);
}
ClassWithBoth implements NumberInterface, FractionInterface{
void numberMethod(Number a){
}
void fractionMethod(Fraction a){
}}
可悲的是,这有点消除了首先拥有 GenericInterface 的漏洞,因为你不能真正使用它。