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

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


The following commit(s) were added to refs/heads/POOL_2_X by this push:
     new 729645c5 Add 
org.apache.commons.pool2.PooledObject.getObject(PooledObject)
729645c5 is described below

commit 729645c52959260f03d693f30f68be037258eefb
Author: Gary Gregory <garydgreg...@gmail.com>
AuthorDate: Wed Jun 11 09:13:43 2025 -0400

    Add org.apache.commons.pool2.PooledObject.getObject(PooledObject)
---
 src/changes/changes.xml                              |  1 +
 .../java/org/apache/commons/pool2/PooledObject.java  | 20 ++++++++++++++++----
 .../org/apache/commons/pool2/PooledObjectTest.java   |  9 +++++++++
 3 files changed, 26 insertions(+), 4 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 0a68f635..1ec06f67 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -63,6 +63,7 @@ The <action> type attribute can be add,update,fix,remove.
     <action type="fix" dev="ggregory" due-to="Gary 
Gregory">org.apache.commons.pool2.impl.GenericObjectPool.create(Duration) 
should normalize a negative duration to zero.</action>
     <!-- ADD -->
     <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
org.apache.commons.pool2.PooledObject.nonNull(PooledObject).</action>
+    <action type="add" dev="ggregory" due-to="Gary Gregory">Add 
org.apache.commons.pool2.PooledObject.getObject(PooledObject).</action>
     <!-- UPDATE -->
     <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
org.apache.commons:commons-parent from 79 to 81.</action>
   </release>
diff --git a/src/main/java/org/apache/commons/pool2/PooledObject.java 
b/src/main/java/org/apache/commons/pool2/PooledObject.java
index c76871e1..e68fe085 100644
--- a/src/main/java/org/apache/commons/pool2/PooledObject.java
+++ b/src/main/java/org/apache/commons/pool2/PooledObject.java
@@ -33,26 +33,38 @@ import java.util.Deque;
  */
 public interface PooledObject<T> extends Comparable<PooledObject<T>> {
 
+    /**
+     * Gets the wrapped object or null.
+     *
+     * @param <T> the type of object in the pool.
+     * @param pooledObject the PooledObject to unwrap, may be null.
+     * @return the wrapped object or null.
+     * @since 2.13.0
+     */
+    static <T> T getObject(final PooledObject<T> pooledObject) {
+        return pooledObject != null ? pooledObject.getObject() : null;
+    }
+
     /**
      * Tests whether the given PooledObject is null <em>or</em> wraps a null.
      *
-     * @param pooledObject the PooledObject to test.
+     * @param pooledObject the PooledObject to test, may be null.
      * @return whether the given PooledObject is null <em>or</em> wraps a null.
      * @since 2.12.0
      */
     static boolean isNull(final PooledObject<?> pooledObject) {
-        return pooledObject == null || pooledObject.getObject() == null;
+        return getObject(pooledObject) == null;
     }
 
     /**
      * Tests whether the given PooledObject isn't null <em>and</em> doesn't 
wraps a null.
      *
-     * @param pooledObject the PooledObject to test.
+     * @param pooledObject the PooledObject to test, may be null.
      * @return whether the given PooledObject isn't null <em>and</em> doesn't 
wraps a null.
      * @since 2.13.0
      */
     static boolean nonNull(final PooledObject<?> pooledObject) {
-        return pooledObject != null && pooledObject.getObject() != null;
+        return getObject(pooledObject) != null;
     }
 
     /**
diff --git a/src/test/java/org/apache/commons/pool2/PooledObjectTest.java 
b/src/test/java/org/apache/commons/pool2/PooledObjectTest.java
index 634bfa45..237eb8e2 100644
--- a/src/test/java/org/apache/commons/pool2/PooledObjectTest.java
+++ b/src/test/java/org/apache/commons/pool2/PooledObjectTest.java
@@ -17,6 +17,8 @@
 
 package org.apache.commons.pool2;
 
+import static org.junit.jupiter.api.Assertions.assertNull;
+import static org.junit.jupiter.api.Assertions.assertNotNull;
 import static org.junit.jupiter.api.Assertions.assertFalse;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 
@@ -28,6 +30,13 @@ import org.junit.jupiter.api.Test;
  */
 public class PooledObjectTest {
 
+    @Test
+    void testGetObject() {
+        assertNull(PooledObject.getObject(null));
+        assertNull(PooledObject.getObject(new DefaultPooledObject<>(null)));
+        assertNotNull(PooledObject.getObject(new DefaultPooledObject<>("a")));
+    }
+
     @Test
     void testIsNull() {
         assertTrue(PooledObject.isNull(null));

Reply via email to