我在理解此类通用方法调用时遇到问题:

object = ObjectGenerator.<T> getObject(objectName);

这是上述情况的上下文:
class GenClass<T> {

   private T object;

   // ... some code

   public void initObject(String objectName) {
      object = ObjectGenerator.<T> getObject(objectName);
   }
}

class ObjectGenerator {

   public static <T extends Object> T getObject(String name) {
      // some code
      return someObject;
   }
}

问题是在调用<T>之前,扮演getObject(objectName)的角色是什么?

最佳答案

注意:在您给出的特定示例中,ObjectGenerator.getObject(objectName);应该可以正常编译。

在某些情况下,类型推断机制无法解决以下事实:

T object;
object = ObjectGenerator.getObject(objectName);

返回的类型应该是T。在这种情况下,您需要通过明确指示您期望的返回类型来为编译器提供一些帮助。

这是一个人为的示例,您需要在其中明确指定泛型类型:
class Example {
    public static <T> List<T> m1() {
        return m2(Arrays.<T> asList()); //Arrays.asList() would not compile
    }
    public static <T> List<T> m2(List<T> l) {
        return l;
    }
}

09-19 16:40