jte*_*dit 5 java extends implements
我需要在类中有一个变量,它是类"ClassA"的实例,但它也实现了接口"InterfaceI".
显然,这可以很容易地为一个或另一个完成:
private ClassA mVariable;
private InterfaceI mVaraible;
Run Code Online (Sandbox Code Playgroud)
但是如何强制对象既扩展了ClassA又实现了InterfaceB?就像是:
private <? extends ClassA & InterfaceI> mVaraible;
Run Code Online (Sandbox Code Playgroud)
是我需要的,但我不知道语法或甚至可能.我还需要一个get和set方法,但这可以用泛型来完成(我想?)
明显的解决方案是
public class ClassB extends ClassA implements InterfaceI{
//whatever here
}
Run Code Online (Sandbox Code Playgroud)
但是,InterfaceI和ClassA都是外部库的一部分,这个库有扩展ClassA和InterfaceI的类,我不能编辑它们以使它们扩展ClassB,因此这个解决方案不起作用.
我找到了一个相当老套的解决方法。
该类包含 ClassA 和 InterfaceI 引用,如下所示:
private ClassA mItemClassA;
private InterfaceI mItemInterfaceI;
Run Code Online (Sandbox Code Playgroud)
set 方法如下所示:
public void setVaraible(ClassA item){
assert (item instanceof InterfaceI);
mItemClassA = item;
mItemInterfaceI = (InterfaceI) item;
}
Run Code Online (Sandbox Code Playgroud)
如果该项目不是 InterfaceI 的实例,则此方法的其他变体可能会引发异常、返回 false 等
然后,类中的其他方法可以使用 mItemClassA 和 mItemInterfaceI 调用 InterfaceI 和 ClassA 中的函数。
我现在不打算实现 get 方法,但如果我这样做,可能必须有一个版本来获取接口和一个版本来获取类。
| 归档时间: |
|
| 查看次数: |
497 次 |
| 最近记录: |