我需要在类“ClassA”的一个实例,但它也实现接口“InterfaceI”的类中有一个变量。成员变量必须扩展类A并实现一些接口
显然,这可以为一个或另一个很容易做到:
private ClassA mVariable;
private InterfaceI mVaraible;
,但我怎么能强制执行对象即扩展ClassA和实现InterfaceB?就像:
private <? extends ClassA & InterfaceI> mVaraible;
是我所需要的,但我不知道的语法,如果它甚至是可能的。我还需要一个get和set方法,但可以使用泛型(我想?)来完成
显而易见的解决方案是
public class ClassB extends ClassA implements InterfaceI{
//whatever here
}
然而InterfaceI和ClassA的都是外部libary的一部分,这libary有扩展ClassA和InterfaceI的类,我无法编辑它们以使它们扩展ClassB,因此此解决方案将无法工作。
你不能,基本上是这样。您可以在设置变量时检查它,然后在需要时进行转换...但您无法在变量本身上表达该约束,而无需将该类设为通用类。 –
在Java8中有一些魔法允许多重继承或某种混合... – Thufir
@Jon Skeet设置变量时如何检查它? – jtedit