java - 有没有办法定义一个通用方法来检查 null 然后创建对象?

标签 java generics generic-method

我想编写一个方法来检查参数在哪里为空,如果是,则返回该类型的新对象。它看起来像:

public static <T> T checkNull(T obj) {
    if (null == obj) return someHowCreateTheObjectWithTypeT();
    else return obj;
}

经过一番努力和挖掘,我仍然找不到实现这一目标的方法,在 java 中是否真的可行?

我一开始想到了反射。但是当对象为 null 时,我无法获得 Class 实例,并且您无法创建没有类型 T 名称的 Class...

更新:

我考虑过将类作为参数传递,但这不是最佳解决方案,如以下答案所示:)

我当前的解决方案是使用默认值参数:

public static <T> T checkNull(T obj, T defaultValue) {
    if (null == obj) return defaultValue;
    return obj;
}

它比反射解决方案更快、更安全,而且同样冗长; 但是我必须系统地为所有感兴趣的类型指定一个 DEFAULT_VALUE,这不是一件容易的工作。

最佳答案

这是不可能的。对于以这种方式工作的泛型,它必须在编译时捕获它将被调用的类型。但是,null 没有类型,因此您无法找出 T 来实例化它。

现在,您也可以通过传入 Class 实例来解决这个问题,但是您将需要使用反射进行一些相当稳健的错误处理,以确保类型 T 是一个具体类,并且具有一个您可以调用的公共(public)无参数构造函数.

关于java - 有没有办法定义一个通用方法来检查 null 然后创建对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098360/

相关文章:

java - 根据一列中的多个条件获取记录

java - 资源和属性文件管理问题

java - 如何使用静态成员泛化 Java 枚举?

java - 泛型:Treeset 添加子类

java - 'U extends Something' VS 有界类型参数中的 'Something'

java - DatabaseException : Failed to convert value of type java. util.HashMap 到字符串 - Firebase

java - 使用 Junit 进行数据驱动测试

java - JSON查询过滤传输

java - 泛型方法的问题

java - 如何返回一个泛型类型,同时将另一个泛型类型作为参数,两者都需要实现接口(interface)?