如何创建一个通用方法,该方法是两个无效的对象和一个类< t>并返回一个强制的非无效价值

发布于 2025-01-17 21:52:37 字数 361 浏览 1 评论 0原文

我想制作一个通用方法,以确定第一个参数null,如果是这种情况,则返回 second ,这是默认值,否则返回第一个。

我可以做到这一点吗?

我不知道如何正确实施它。

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

注意:此代码对真实不起作用,这只是一个示例。

I want to make a generic method that determines whether the first parameter is null, and if it is the case returns the second which is the default, else returns the first.

Can I make this possible?

I don't know how to implement it properly.

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

Note: this code doesn't work for real, it's just an example.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

⊕婉儿 2025-01-24 21:52:37

我认为这个链接可能有用:
Java 中是否存在相当于 null 合并运算符 ( ??) 在 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; }

I think this link might be useful:
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; }

or

 public static <T> T coalesce(T... params) {
     for (T param : params)
         if (param != null)
             return param;
     return null; }
你好,陌生人 2025-01-24 21:52:37

您可以使用类似的东西,

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

You can use something like this,

public static <T> T getValOrDefault(T value, T defaultValue) {
    return value != null ? value : defaultValue;
}
尽揽少女心 2025-01-24 21:52:37

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

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

I am not 100 % sure, but i think you want something like that:

public static <T> T ifNull(T parameter, T defaultValue) {
    return parameter == null ? defaultValue: parameter;
}
等你爱我 2025-01-24 21:52:37

如果您要接收两个 nullable 对象的对象 type type,并希望通过传递<的实例,将它们动态化为给定类型代码> class&lt; t&gt; 对您的方法,我认为您打算实现这一目标:

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&lt; t&gt;对象代表类或接口

方法 cast () 将给定对象施放到特定类型t,如果该对象是可以分配给该类型的,否则classcastException将是扔。请注意,编译器不会发出这种降落方式的警告(它总是可能不安全)。

可选是一个特殊的容器 - 对象,它带有 java 8 ,以便在结果值为null的情况下使用返回类型。 可选对象可能包含一个值或空为空,但是它永远不会是null如果您遵循良好的做法,并且 使用可选的字段,方法参数,而不将其存储在任何地方

optional.ofnullable() 创建可选对象包含给定值,如果是 non-null ,否则返回空的可选

方法或()将在提供的可选的情况下替换当前可选对象

方法执行的结果将如下:

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

注意:

  • 为了声明通用方法,您必须放置一个通用类型参数,例如&lt; t&gt;或野生卡<代码>&lt;?扩展数字&gt; 在修饰符之间返回类型 或关键字void)以上 &lt; t&gt; 是加入类型参数和 可选&lt; t&gt; 是返回类型 )。
  • 默认值是Java中的关键字。

If you are receiving two nullable objects of Object type and want to type-cast them dynamically to the given type by passing an in instance of Class<T> to your method, I think you were intending to achieve this:

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> object represents a class or interface

Method cast() will cast the given object to a particular type T, if it's the object is assignable to that type, otherwise a ClassCastException will be thrown. Note that compiler will not issue warnings for such way of downcasting (which is always potentially unsafe).

Optional is a special container-object introduced with Java 8 in order to be used a return type in cases when the resulting value could be null. Optional object might either contain a value or be empty, but it would never be null (if you are following good practices and not using optional as a field, method parameter and not storing it anywhere)

Optional.ofNullable() creates optional object containing the given value, if it's non-null, otherwise returns an empty optional.

Method or() will substitute the current optional object, if it is empty, with the provided optional.

The result of method execution will be the following:

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

Note:

  • In order to declare a generic method you have to place a generic type parameter like <T> or wild card <? extends Number> between modifiers and return type or keyword void (in the method above <T> is ageneric type parameter and Optional<T> is a return type).
  • default is a keyword in Java.
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文