另一个令人困惑的Java泛型

WeM*_*are 0 java generics

我在Utility类中有一个静态方法:

public static final <T extends Foo & IBar>  Foo1<T> getBaz(Class<T> fooAndIBarClazz)
Run Code Online (Sandbox Code Playgroud)

我有另一个班:

public class FooBar<T extends Foo> {
     private Class<T> fooClazz;
//...
}
Run Code Online (Sandbox Code Playgroud)

FooBar我要调用的实例内部Utility.getBaz()

public void aMethod() {
   Utility.getBaz(fooClazz); // fails with not a valid substitute for the bounded parameter
   //Utility.<IBar>getBaz(fooClazz); // fails as well
}
Run Code Online (Sandbox Code Playgroud)

是否可以在没有额外投射的情况下以这种通用方式调用实用程序方法?

Joe*_*ckx 6

Java中的泛型添加了编译时类型检查,基本上可以帮助您避免转换.如果有什么东西你不能用铸造,你也将无法用泛型做.

如果你不能确认你用实现IBar调用方法的类,你期望被调用的方法用它做什么?显然,它需要IBar定义的方法(否则它将不具有该签名).所以它无法完成它的工作.