我在理解这种泛型方法调用时遇到问题:
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)调用之前扮演什么角色?
注意:在您给出的具体示例中,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)