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

public static final <T extends Foo & IBar>  Foo1<T> getBaz(Class<T> fooAndIBarClazz)


我还有另一堂课:

public class FooBar<T extends Foo> {
     private Class<T> fooClazz;
//...
}


我想从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
}


是否可以通过这种通用方式调用实用程序方法而无需进行其他强制转换?

最佳答案

Java中的泛型添加了编译时类型检查,并且基本上可以帮助您避免强制转换。如果有某些您无法使用强制转换,那么您也将无法使用泛型。

如果您不能确认正在使用IBar调用方法的类是否实现了IBar,那么您对被调用方法有什么期望?显然,它需要IBar定义的方法(否则它将没有该签名)。因此它无法执行其工作。

关于java - Java中的另一个令人困惑的泛型,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11989284/

10-10 01:09