如何从泛型类调用静态方法?

时间:2012-01-14 07:37:39

标签: java generics

我有一个包含静态创建方法的类。

public class TestClass {

 public static <E> TestClass<E> create() {
    return new TestClass<E>();
  }

}

当我使用TestClass.create()时,可以编译它。但是当我使用TestClass<String>.create()时,它无法编译,如何指定泛型?

3 个答案:

答案 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();