在Java中创建T的新实例

| 在C#中,我们可以定义通用的“ 0”。在此代码中,我们可以使用
new T()
创建
T
的实例。这如何在Java中实现?我读了一些文章说那是不可能的。 我使用C#中的泛型的单例模式的原因是:
public static class Singleton<T> where T : new()
{
    private static T instance;

    public static T Instance
    {
        get 
        {
            if (instance == null)
            {
                instance = SingletonCreater.Instance;
            }
            return instance;
        }
    }

    static class SingletonCreater
    {
        internal static readonly T Instance = new T();
    }
}
以及使这种方法更优美的方法?
已邀请:
不,您不能做新的T(),因为您不知道T是否没有参数arg构造函数,并且由于类型擦除,在运行时不存在T的类型。 要创建T的实例,您需要使用以下代码,
public <T> T create(Class<T> clazz) {
    try {
        //T must have a no arg constructor for this to work 
        return clazz.newInstance(); 
    } catch (InstantiationException e) {
        throw new IllegalStateException(e);
    } catch (IllegalAccessException e) {
        throw new IllegalStateException(e);
}
是的,
new T()
是不可能的,因为泛型是Java中的编译时功能。在运行期间,通用信息会丢失;因此,您将无法执行
new T()
,因为JVM不知道运行时during1是什么。 使用Java所提到的确切语法可能会让您不走运。
谢谢大家,我们不能在JAVA中使用它。用Sbridges的方式,在C#中,我们可以这样实现:
static T Create(Type type)
{
    return (T)Activator.CreateInstance(type);
}
甚至更简单:
static T Create()
{
    return Activator.CreateInstance<T>();
}
只是让你知道。

要回复问题请先登录注册