使用<T>进行通用方法调用

emk*_*a86 7 java generics jls

我在理解这种泛型方法调用时遇到问题:

object = ObjectGenerator.<T> getObject(objectName);
Run Code Online (Sandbox Code Playgroud)

以下是上述情况的背景:

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;
   }
}
Run Code Online (Sandbox Code Playgroud)

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

ass*_*ias 7

注意:在您给出的具体示例中,ObjectGenerator.getObject(objectName);应该编译正常.

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

T object;
object = ObjectGenerator.getObject(objectName);
Run Code Online (Sandbox Code Playgroud)

返回的类型应该是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;
    }
}
Run Code Online (Sandbox Code Playgroud)