This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git


The following commit(s) were added to refs/heads/master by this push:
     new 177911e47 Add ObjectUtils.getIfNull(Object, Object) and deprecate 
defaultIfNull(Object, Object)
177911e47 is described below

commit 177911e47146db0df2e35839d6bd03ad1315916c
Author: Gary D. Gregory <garydgreg...@gmail.com>
AuthorDate: Wed May 28 16:19:39 2025 -0400

    Add ObjectUtils.getIfNull(Object, Object) and deprecate
    defaultIfNull(Object, Object)
    
    A adaptation of PR #1355 by Pankraz76
---
 src/changes/changes.xml                            |  1 +
 .../java/org/apache/commons/lang3/ObjectUtils.java | 30 ++++++++++++++++++++--
 .../org/apache/commons/lang3/builder/Diff.java     |  2 +-
 .../apache/commons/lang3/reflect/TypeUtils.java    |  4 +--
 .../commons/lang3/text/FormattableUtils.java       |  2 +-
 .../apache/commons/lang3/time/DurationUtils.java   |  2 +-
 .../org/apache/commons/lang3/ObjectUtilsTest.java  | 29 +++++++++++++++++++++
 .../org/apache/commons/lang3/function/Objects.java |  2 +-
 8 files changed, 64 insertions(+), 8 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index fccb38669..e4918f047 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -123,6 +123,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action                   type="add" dev="ggregory" due-to="Gary 
Gregory">Add SystemProperties.JAVA_SECURITY_KERBEROS_KDC.</action>
     <action                   type="add" dev="ggregory" due-to="Gary 
Gregory">Add SystemProperties.JAVA_SECURITY_KERBEROS_REAL.</action>
     <action                   type="add" dev="ggregory" 
due-to="kommalapatiraviteja">Add ArrayFill.fill(boolean[], boolean) 
#1386.</action>
+    <action                   type="add" dev="ggregory" due-to="Pankraz76, 
Gary Gregory">Add ObjectUtils.getIfNull(Object, Object) and deprecate 
defaultIfNull(Object, Object).</action>
     <!-- UPDATE -->
     <action                   type="update" dev="ggregory" due-to="Gary 
Gregory, Dependabot">Bump org.apache.commons:commons-parent from 73 to 84 
#1267, #1277, #1283, #1288, #1302, #1377.</action>
     <action                   type="update" dev="ggregory" due-to="Gary 
Gregory, Dependabot">[site] Bump org.codehaus.mojo:taglist-maven-plugin from 
3.1.0 to 3.2.1 #1300.</action>
diff --git a/src/main/java/org/apache/commons/lang3/ObjectUtils.java 
b/src/main/java/org/apache/commons/lang3/ObjectUtils.java
index 6fb6d40c6..bdd84ef5c 100644
--- a/src/main/java/org/apache/commons/lang3/ObjectUtils.java
+++ b/src/main/java/org/apache/commons/lang3/ObjectUtils.java
@@ -580,10 +580,13 @@ public static short CONST_SHORT(final int v) {
      * @param object  the {@link Object} to test, may be {@code null}
      * @param defaultValue  the default value to return, may be {@code null}
      * @return {@code object} if it is not {@code null}, defaultValue otherwise
-     * TODO Rename to getIfNull in 4.0
+     * @see #getIfNull(Object, Object)
+     * @see #getIfNull(Object, Supplier)
+     * @deprecated Use {@link #getIfNull(Object, Object)}.
      */
+    @Deprecated
     public static <T> T defaultIfNull(final T object, final T defaultValue) {
-        return object != null ? object : defaultValue;
+        return getIfNull(object, defaultValue);
     }
 
     // Null-safe equals/hashCode
@@ -703,12 +706,35 @@ public static <T> T getFirstNonNull(final Supplier<T>... 
suppliers) {
      * @param object the {@link Object} to test, may be {@code null}
      * @param defaultSupplier the default value to return, may be {@code null}
      * @return {@code object} if it is not {@code null}, {@code 
defaultValueSupplier.get()} otherwise
+     * @see #getIfNull(Object, Object)
      * @since 3.10
      */
     public static <T> T getIfNull(final T object, final Supplier<T> 
defaultSupplier) {
         return object != null ? object : Suppliers.get(defaultSupplier);
     }
 
+    /**
+     * Returns a default value if the object passed is {@code null}.
+     *
+     * <pre>
+     * ObjectUtils.getIfNull(null, null)      = null
+     * ObjectUtils.getIfNull(null, "")        = ""
+     * ObjectUtils.getIfNull(null, "zz")      = "zz"
+     * ObjectUtils.getIfNull("abc", *)        = "abc"
+     * ObjectUtils.getIfNull(Boolean.TRUE, *) = Boolean.TRUE
+     * </pre>
+     *
+     * @param <T> the type of the object
+     * @param object  the {@link Object} to test, may be {@code null}
+     * @param defaultValue  the default value to return, may be {@code null}
+     * @return {@code object} if it is not {@code null}, defaultValue otherwise
+     * @see #getIfNull(Object, Supplier)
+     * @since 3.18.0
+     */
+    public static <T> T getIfNull(final T object, final T defaultValue) {
+        return object != null ? object : defaultValue;
+    }
+
     /**
      * Gets the hash code of an object returning zero when the
      * object is {@code null}.
diff --git a/src/main/java/org/apache/commons/lang3/builder/Diff.java 
b/src/main/java/org/apache/commons/lang3/builder/Diff.java
index 4fb67c7ca..ac2c662ea 100644
--- a/src/main/java/org/apache/commons/lang3/builder/Diff.java
+++ b/src/main/java/org/apache/commons/lang3/builder/Diff.java
@@ -56,7 +56,7 @@ public abstract class Diff<T> extends Pair<T, T> {
      */
     protected Diff(final String fieldName) {
         this.fieldName = Objects.requireNonNull(fieldName);
-        this.type = 
ObjectUtils.defaultIfNull(TypeUtils.getTypeArguments(getClass(), 
Diff.class).get(Diff.class.getTypeParameters()[0]), Object.class);
+        this.type = 
ObjectUtils.getIfNull(TypeUtils.getTypeArguments(getClass(), 
Diff.class).get(Diff.class.getTypeParameters()[0]), Object.class);
     }
 
     Diff(final String fieldName, final Type type) {
diff --git a/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java 
b/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
index 18e1ad59d..8da8e5c5d 100644
--- a/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
+++ b/src/main/java/org/apache/commons/lang3/reflect/TypeUtils.java
@@ -235,8 +235,8 @@ private static final class WildcardTypeImpl implements 
WildcardType {
          * @param lowerBounds of this type
          */
         private WildcardTypeImpl(final Type[] upperBounds, final Type[] 
lowerBounds) {
-            this.upperBounds = ObjectUtils.defaultIfNull(upperBounds, 
ArrayUtils.EMPTY_TYPE_ARRAY);
-            this.lowerBounds = ObjectUtils.defaultIfNull(lowerBounds, 
ArrayUtils.EMPTY_TYPE_ARRAY);
+            this.upperBounds = ObjectUtils.getIfNull(upperBounds, 
ArrayUtils.EMPTY_TYPE_ARRAY);
+            this.lowerBounds = ObjectUtils.getIfNull(lowerBounds, 
ArrayUtils.EMPTY_TYPE_ARRAY);
         }
 
         /**
diff --git a/src/main/java/org/apache/commons/lang3/text/FormattableUtils.java 
b/src/main/java/org/apache/commons/lang3/text/FormattableUtils.java
index 8a5d085a1..5a7596031 100644
--- a/src/main/java/org/apache/commons/lang3/text/FormattableUtils.java
+++ b/src/main/java/org/apache/commons/lang3/text/FormattableUtils.java
@@ -97,7 +97,7 @@ public static Formatter append(final CharSequence seq, final 
Formatter formatter
                 "Specified ellipsis '%1$s' exceeds precision of %2$s", 
ellipsis, Integer.valueOf(precision));
         final StringBuilder buf = new StringBuilder(seq);
         if (precision >= 0 && precision < seq.length()) {
-            final CharSequence actualEllipsis = 
ObjectUtils.defaultIfNull(ellipsis, StringUtils.EMPTY);
+            final CharSequence actualEllipsis = 
ObjectUtils.getIfNull(ellipsis, StringUtils.EMPTY);
             buf.replace(precision - actualEllipsis.length(), seq.length(), 
actualEllipsis.toString());
         }
         final boolean leftJustify = (flags & FormattableFlags.LEFT_JUSTIFY) == 
FormattableFlags.LEFT_JUSTIFY;
diff --git a/src/main/java/org/apache/commons/lang3/time/DurationUtils.java 
b/src/main/java/org/apache/commons/lang3/time/DurationUtils.java
index 3c670849a..d90f69b6f 100644
--- a/src/main/java/org/apache/commons/lang3/time/DurationUtils.java
+++ b/src/main/java/org/apache/commons/lang3/time/DurationUtils.java
@@ -219,7 +219,7 @@ public static int toMillisInt(final Duration duration) {
      * @return The given duration or {@link Duration#ZERO}.
      */
     public static Duration zeroIfNull(final Duration duration) {
-        return ObjectUtils.defaultIfNull(duration, Duration.ZERO);
+        return ObjectUtils.getIfNull(duration, Duration.ZERO);
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java 
b/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java
index 92e5f0440..8f0639d42 100644
--- a/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java
+++ b/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java
@@ -503,6 +503,35 @@ public void testGetFirstNonNull() {
         assertEquals(Boolean.TRUE, 
ObjectUtils.getFirstNonNull(Suppliers.nul(), () -> Boolean.TRUE));
     }
 
+    @Test
+    public void testGetIfNullObject() {
+        final Object o = FOO;
+        final Object defaultObject = BAR;
+        assertNull(ObjectUtils.getIfNull(null, (Object) null));
+        assertSame(defaultObject, ObjectUtils.getIfNull(null, defaultObject), 
"dflt was not returned when o was null");
+        assertSame(o, ObjectUtils.getIfNull(o, defaultObject), "dflt was 
returned when o was not null");
+    }
+
+    @Test
+    public void testGetIfNullSupplier() {
+        final Object o = FOO;
+        final Object defaultObject = BAR;
+        assertNull(ObjectUtils.getIfNull(null, (Supplier<Object>) null));
+        assertSame(defaultObject, ObjectUtils.getIfNull(null, () -> 
defaultObject), "dflt was not returned when o was null");
+        assertSame(o, ObjectUtils.getIfNull(o, () -> defaultObject), "dflt was 
returned when o was not null");
+        assertSame(o, ObjectUtils.getIfNull(FOO, () -> defaultObject), "dflt 
was returned when o was not null");
+        assertSame(o, ObjectUtils.getIfNull("foo", () -> defaultObject), "dflt 
was returned when o was not null");
+        final MutableInt callsCounter = new MutableInt(0);
+        final Supplier<Object> countingDefaultSupplier = () -> {
+            callsCounter.increment();
+            return defaultObject;
+        };
+        ObjectUtils.getIfNull(o, countingDefaultSupplier);
+        assertEquals(0, callsCounter.getValue());
+        ObjectUtils.getIfNull(null, countingDefaultSupplier);
+        assertEquals(1, callsCounter.getValue());
+    }
+
     @Test
     public void testHashCode() {
         assertEquals(0, ObjectUtils.hashCode(null));
diff --git a/src/test/java/org/apache/commons/lang3/function/Objects.java 
b/src/test/java/org/apache/commons/lang3/function/Objects.java
index 29f72d97f..fcc53c90f 100644
--- a/src/test/java/org/apache/commons/lang3/function/Objects.java
+++ b/src/test/java/org/apache/commons/lang3/function/Objects.java
@@ -52,7 +52,7 @@
  *
  * This class is somewhat redundant with regards to {@link ObjectUtils}.
  * For example, {@link #requireNonNull(Object, Object)} is almost equivalent
- * with {@link ObjectUtils#defaultIfNull(Object, Object)}. However, it isn't
+ * with {@link ObjectUtils#getIfNull(Object, Object)}. However, it isn't
  * quite the same, because the latter can, in fact, return null. The former
  * can't, and the Java compiler confirms this.(An alternative to redundancy
  * would have been to change the {@code ObjectUtils} class. However, that

Reply via email to