From 716bab9625e7e634bfc3f6640c554b9bd38f7eba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Cezary=20Kluczy=C5=84ski?= Date: Wed, 19 Oct 2016 18:04:57 +0200 Subject: [PATCH] ObjectUtils::xorNull added --- .../org/apache/commons/lang3/ObjectUtils.java | 20 +++++++++++++++++++ .../apache/commons/lang3/ObjectUtilsTest.java | 12 +++++++++++ 2 files changed, 32 insertions(+) diff --git a/src/main/java/org/apache/commons/lang3/ObjectUtils.java b/src/main/java/org/apache/commons/lang3/ObjectUtils.java index d328105e0e8..856901e98eb 100644 --- a/src/main/java/org/apache/commons/lang3/ObjectUtils.java +++ b/src/main/java/org/apache/commons/lang3/ObjectUtils.java @@ -194,6 +194,26 @@ public static boolean allNotNull(final Object... values) { return true; } + /** + * Exclusive or. Returns true only if exactly one of two values is {@code null}. + * + *
+     * ObjectUtils.xorNull(a, b)       = false
+     * ObjectUtils.xorNull(null, null) = false
+     * ObjectUtils.xorNull(a, null)    = true
+     * ObjectUtils.xorNull(null, b)    = true
+     * 
+ * + * @param object1 the first object, may be {@code null} + * @param object2 the second object, may be {@code null} + * @return {@code false} if both values are {@code null}, or if no values is null, + * {@code true} if exactly one of two values is {@code null}. + * @since 3.6 + */ + public static boolean xorNull(final Object object1, final Object object2) { + return object1 != null ^ object2 != null; + } + // Null-safe equals/hashCode //----------------------------------------------------------------------- /** diff --git a/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java b/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java index 083264780ab..b516ddfa835 100644 --- a/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java +++ b/src/test/java/org/apache/commons/lang3/ObjectUtilsTest.java @@ -121,6 +121,18 @@ public void testAllNotNull() { assertTrue(ObjectUtils.allNotNull(FOO, BAR, 1, Boolean.TRUE, new Object(), new Object[]{})); } + /** + * Tests {@link ObjectUtils#xorNull(Object object1, Object object2)}. + */ + @Test + public void testXorNull() { + assertFalse(ObjectUtils.xorNull(null, null)); + assertFalse(ObjectUtils.xorNull(FOO, BAR)); + + assertTrue(ObjectUtils.xorNull(null, FOO)); + assertTrue(ObjectUtils.xorNull(BAR, null)); + } + //----------------------------------------------------------------------- @Test public void testEquals() {