【发布时间】:2015-08-21 09:50:00
【问题描述】:
好的,所以我已经搜索过,但找不到这个特定问题的答案。这可能是一个反复出现的问题,我不知道引用它的正确术语,因此感谢所有帮助。 :)
假设我们有一个方法 m0,它从接口 I 接收一个对象,对象 i。
A 类和 B 类扩展接口 I,因此对象 i 可以属于 A 类或 B 类。
然后,在方法 m1 中,我想使用接口 I 中声明的方法 mi,它接收接口 I 的参数。
在 A 类和 B 类中,我实现了 mi,并且我希望 mi 根据参数运行。如果 mi 接收到类 A 的对象,我希望它使用类 A 的 mi 实现,否则,我想要类 B 的实现。如果对象是 A 的实例,我不想检查方法 m0还是 B,因为我希望方法是独立的,并且只依赖于接口 I。有机会我想引入更多扩展 I 的类。
public boolean m0(I i1, I i2){
return i1.mi(i2);
}
public interface I{
public boolean mi(I i);
}
class A implements I{
boolean boolValue;
...
mi(I i){
if(this.boolValue == i.boolValue)
return true;
return false;
}
}
class B implements I{
int intValue;
...
mi(I i){
if(this.intValue == i.intValue)
return true;
return false;
}
}
这个想法是 A 类和 B 类本质上是不同的,但我希望它们具有共同的 mi 方法。所以 i1.mi(i2) 应该根据参数 i2 进行调整。保证 i1 和 i2 在 m0 中始终属于同一类。然而,在两个类的 m0 方法实现中,我不允许访问 i 对象属性 booleanValue 或 intValue(取决于参数类型)。
我已经编辑了问题,因为我没有正确解释问题,无论如何谢谢你到目前为止的答案。
谢谢
编辑:这个问题解决了。为了实现我正在寻找的那种行为,可以使用泛型类型。 https://docs.oracle.com/javase/tutorial/java/generics/types.html
【问题讨论】:
-
你在哪里有 m0 方法?
-
@Thusitha Thilina Dayaratne m0 在另一个类中。
标签: java class interface overwrite generic-type-argument