假设我有一个这样的界面
public interface Foo<Ret, Arg> {
public Ret doSomething(Arg arg);
}
以及一个仅具有包可见性的具体实现类。
class FooImpl<Ret, Arg1, Arg2> implements Foo<Ret, Arg>, Bar<Ret, Arg1, Arg2> {
// This class also implements something else making use of Arg2, so you cannot safely remove it
// But nothing relating to Arg2 is needed to create a FooImpl
}
(如何发生这种情况的一个例子是两个接口声明的方法的实现和Foo
转发到一个可变参数方法)Bar
FooImpl
现在,假设在同一个包中的某处有一个静态方法返回 aFooImpl
作为 a Foo
。有人会认为您可以使用return new FooImpl<Ret, Arg1, ?>(...)
,而实际上您不能(您必须使用具体的虚拟类型作为Arg2
,即return new FooImpl<Ret, Arg1, Object>(...)
,比如说)。
知道为什么会这样,尤其是Foo
界面和包可见性有效地隐藏了FooImpl
使用静态方法的任何内容吗?是因为人们仍然可以在某种程度上使用反射来到达需要具体类型的Bar
部分吗?FooImpl