我有一个包含静态创建方法的类。
public class TestClass {
public static <E> TestClass<E> create() {
return new TestClass<E>();
}
}
当我使用TestClass.create()
时,可以编译它。但是当我使用TestClass<String>.create()
时,它无法编译,如何指定泛型?
答案 0 :(得分:10)
假设您要求在类型推断失败的情况下明确指定类型,您可以使用TestClass.<String>create()
(注意类型在.
之后而不是之前的类型。)
答案 1 :(得分:4)
是的,那很漂亮......不直观。
Josh Bloch关于这个问题的有效Java,第2版的演示文稿的旁注:“每当你指定一个明确的类型参数时,上帝会杀死一只小猫”。我想避免像这样的结构,但有时它无法回避。
诀窍是在.
字符后指定泛型参数:TestClass.<String>create()
。
答案 2 :(得分:1)
泛型类型可以在类声明中指定:
public class TestClass<E> {
public static <E> TestClass<E> create() {
return new TestClass<E>();
}
}
// Elsewhere in the code
TestClass<String> testClass = TestClass.create();