Java泛型约束需要像C#这样的默认构造函数 [英] Java generics constraint require default constructor like C#

查看:109
本文介绍了Java泛型约束需要像C#这样的默认构造函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在C#中,我可以对通用类型设置默认无参数构造函数的泛型参数设置类型约束。我可以在Java中做同样的事情吗?



在C#中:

  public static T SomeMethodThatDoesSomeStuff< T>()其中T:class,new()
{
// ...方法主体...
}
extends
来命名所需的超类。我可以使用那个(或其他支持的操作)来实现上述功能吗?在Java中,典型的解决方案是传递一个类,而 doc 是0-arg构造函数的要求。这当然不是静态检查,但不是太大的问题。

  / ** clazz必须有一个公共的默认构造函数* / 
public static< T> T f(Class< T> clazz)
return clazz.newInstance();


In C#, I can put a type constraint on a generic parameter that requires the generic type to have a default parameterless constructor. Can I do the same in Java?

In C#:

    public static T SomeMethodThatDoesSomeStuff<T>() where T : class, new()
    {
            // ... method body ...
    }

The class and new() constraints mean that T must be a class that can be called with the new operator with zero parameters. What little I know of Java generics, I can use extends to name a required super class. Can I use that (or any other supported operation) to achieve the above functionality?

解决方案

No; in Java the typical solution is to pass a class, and doc the requirement of 0-arg constructor. This is certainly less static checking, but not too huge a problem

/** clazz must have a public default constructor */
public static <T> T f(Class<T> clazz)
    return clazz.newInstance();

这篇关于Java泛型约束需要像C#这样的默认构造函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆