如何创建一个泛型方法,两个可空对象和一个 Class<T> 和 returns 一个强制非空值

How to create a generic method that two Nullable Objects and a Class<T> and returns a coerced non-null Value

我想创建一个通用方法来确定 第一个参数 是否为 null,如果是 returns [=23] =]second 这是默认值,否则 returns 第一个。

我能让这成为可能吗?

我不知道如何正确实施。

 public static <T> ifNull(Object parameter, Object default, Class<T> type) {
        return type.cast(parameter == null ? default: parameter));
 }

注意:此代码并非真实有效,它只是一个示例。

你可以使用这样的东西,

public static <T> T getValOrDefault(T value, T defaultValue) {
    return value != null ? value : defaultValue;
}

我不是 100% 确定,但我想你想要这样的东西:

public static <T> T ifNull(T parameter, T defaultValue) {
    return parameter == null ? defaultValue: parameter;
}

我认为这个 link 可能有用: is there a Java equivalent to null coalescing operator (??) in C#?

 public static <T> T coalesce(T one, T two) {
    return one != null ? one : two; }

 public static <T> T coalesce(T... params) {
     for (T param : params)
         if (param != null)
             return param;
     return null; }

如果您接收到两个 nullable 类型的 Object 对象,并且想要 type-cast 它们动态地通过将 Class<T> 的 in 实例传递给您的方法给定类型,我认为您打算实现此目的:

public static <T> Optional<T> ifNull(Object first, Object second, Class<T> type) {
    return Optional.ofNullable(type.cast(first))
            .or(() -> Optional.ofNullable(type.cast(second)));
}

Class<T>对象表示一个class或接口

方法cast()会将给定对象转换为特定类型T,如果该对象可分配给该类型,否则将抛出ClassCastException。请注意,编译器不会对这种向下转换方式发出警告(这总是潜在的不安全)。

Optional 是一个特殊的 container-object 引入 Java 8 以便在案例中使用 return 类型当结果值可能是 null 时。 可选对象 可能包含一个值或为空,但它永远不会是 null如果您遵循良好做法并且 不是 使用可选作为字段、方法参数并且不将其存储在任何地方)

Optional.ofNullable() 创建包含给定值的 可选对象 ,如果它是 non-null,否则 return是一个空的可选

方法 or() 将替换当前 可选对象 ,如果它为空,则使用提供的可选对象。

方法执行的结果如下:

Optional[first] --(first == null)--> Optional[second] --(second == null)--> empty optional

注:

  • 为了声明一个泛型方法,你必须在修饰符之间放置一个泛型类型参数,如 <T> 或通配符 <? extends Number> return 键入 或关键字 void 在上面的方法中 <T> 是泛型类型参数并且 Optional<T> 是return类型).
  • default 是 Java 中的关键字。