如何创建一个泛型方法,两个可空对象和一个 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 中的关键字。
我想创建一个通用方法来确定 第一个参数 是否为 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 中的关键字。