如何将变量类型设置为"实现这两个接口的东西"?

dav*_*lab 2 java interface

所以,是的,我已经看到了这个问题.但是,如果我有两个接口,IA以及IB,但我想一个参数的函数(或类的属性)是:

public void (<? extends IA, IB> someClass) {
//...
}
Run Code Online (Sandbox Code Playgroud)

有没有办法在不使用泛型的情况下做到这一点?

编辑:

我意识到我真正想要的是Duck Typing,就像在Python中一样.我只是没说出正确的话.考虑到这一点,显然在Java中没有真正的方法可以做到这一点.我接受了这个答案,但随后意识到输入必须要有新的签名interface才能工作.但是,他确实符合我笨拙措辞的标准:).

Jes*_*per 6

此语法适用于您希望将某些内容传递到实现两个接口的方法,IA并且IB:

public <T extends IA & IB> void someMethod(T arg) {
    // ...
}
Run Code Online (Sandbox Code Playgroud)

对于类的成员变量:

public class Example<T extends IA & IB> {
    private T value;

    // ...
}
Run Code Online (Sandbox Code Playgroud)

(为什么你想在没有泛型的情况下这样做?).


Gor*_*son 5

interface IAandIB extends IA, IB { }

public void Foo(IAandIB someClass) {
//...
}
Run Code Online (Sandbox Code Playgroud)

由于接口可以扩展多个其他接口,因此您可以创建一个空的"虚拟接口"来扩展它们,并在需要时将其用作指定类型.

这工作,但它需要你修改实现每一个类不是一个包罗万象的解决方案IA,并IB让他们可以为这个方法,这是在某些情况下,最好恼人的,也不可能工作.不幸的是,如果没有泛型,我不知道有任何其他方法可以做到这一点.

  • 我不认为这是对的.原始海报想要一个方法,其参数是其类实现IA并且还实现IB的任何对象.通常,这样的类不会实现IAB,因此该对象将无法传递给此方法.如果我误解了你的答案,请纠正我. (3认同)