如何创建泛型类型?

时间:2014-02-03 06:31:53

标签: java generics

我已经定义了这样一个类:

public class MyClass<T implements MyInterface> {
    public T getMy() {
        return new T();
    }
}

这不会编译。我不允许创建泛型类型T.

我该如何解决这个问题?这样做有什么好的模式吗?我可以通过使用抽象类而不是接口来解决这个问题吗?我必须使用反射吗?

4 个答案:

答案 0 :(得分:3)

您无法在此使用implements

<T implements MyInterface> // can't use interface.

所以你可以在那里使用Abstract Class

<T extends MyAbstractClass>

答案 1 :(得分:1)

public class MyClass<T extends MyInterface> {

   T getMy(Class<T> clazz) throws InstantiationException, IllegalAccessException
    {
        return clazz.newInstance();
    }
}

答案 2 :(得分:1)

您可以通过传递实际的类类型(例如构造函数),Class<T>并在其上调用newInstance()来实现此目的,如果默认构造函数对您没有问题。 如果您需要其他构造函数,则需要使用反射API,例如通过getDeclaredConstructors()在这个非常类的类型对象上。

答案 3 :(得分:0)

这里有一些问题。

  • 创建有界泛型类型的语法不正确;您需要使用extends关键字。 {@ 3}}在这个意义上,因为它曾经意味着泛型类型可以扩展另一个类,或者实现一个接口。

  • 您无法直接实例化泛型类型。这是一种笨拙的方式(没有反射,因为它),The extends keyword is more general

    public T getInstance(Class<T> clazz) throws IllegalAccessException, InstantiationException {
        return clazz.newInstance();
    }