繁体   English   中英

如何创建泛型?

[英]How to create generic type?

我定义了一个这样的类:

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

这不会编译。 我不允许创建通用类型T。

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

您不能在此处使用implements

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

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

<T extends MyAbstractClass>
public class MyClass<T extends MyInterface> {

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

您可以通过传递实际的类类型(例如,传递给构造函数), Class<T>并在默认构造函数确定的情况下对其调用newInstance()来实现。 如果需要另一个构造函数,则需要使用反射API,例如,通过此类类型对象上的getDeclaredConstructors()

这里有几个问题。

  • 您创建有界的泛型类型的语法不正确; 您需要使用extends关键字。 extends这个意义上来说, extends关键字更通用 ,因为它用来表示泛型类型可以扩展另一个类或实现一个接口。

  • 您不能直接实例化泛型类型。 这是一种更笨拙的方式(实际上没有反射),这是此Stack Overflow答案提供的

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM