From 9cc649898d018ca87fa83ae9831ca9bee856f70b Mon Sep 17 00:00:00 2001 From: Mingliang Liu Date: Wed, 17 Apr 2024 15:28:36 -0700 Subject: [PATCH] [FLINK-35148][core] Improve InstantiationUtil for checking nullary public constructor --- .../org/apache/flink/util/InstantiationUtil.java | 12 +++--------- .../org/apache/flink/util/InstantiationUtilTest.java | 8 ++++++++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java b/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java index 4f0a8b66f83ae..8207e6379a2db 100644 --- a/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java +++ b/flink-core/src/main/java/org/apache/flink/util/InstantiationUtil.java @@ -41,9 +41,9 @@ import java.io.ObjectStreamClass; import java.io.OutputStream; import java.io.Serializable; -import java.lang.reflect.Constructor; import java.lang.reflect.Modifier; import java.lang.reflect.Proxy; +import java.util.Arrays; import java.util.Collections; import java.util.HashMap; import java.util.HashSet; @@ -391,14 +391,8 @@ public static T instantiate(Class clazz) { * @return True, if the class has a public nullary constructor, false if not. */ public static boolean hasPublicNullaryConstructor(Class clazz) { - Constructor[] constructors = clazz.getConstructors(); - for (Constructor constructor : constructors) { - if (constructor.getParameterCount() == 0 - && Modifier.isPublic(constructor.getModifiers())) { - return true; - } - } - return false; + return Arrays.stream(clazz.getConstructors()) + .anyMatch(constructor -> constructor.getParameterCount() == 0); } /** diff --git a/flink-core/src/test/java/org/apache/flink/util/InstantiationUtilTest.java b/flink-core/src/test/java/org/apache/flink/util/InstantiationUtilTest.java index b9543181d6cea..1d4150d92696a 100644 --- a/flink-core/src/test/java/org/apache/flink/util/InstantiationUtilTest.java +++ b/flink-core/src/test/java/org/apache/flink/util/InstantiationUtilTest.java @@ -115,6 +115,14 @@ public void testHasNullaryConstructor() { assertTrue(InstantiationUtil.hasPublicNullaryConstructor(StringValue.class)); } + /** + * Test that {@link InstantiationUtil} class per se does not have a nullary public constructor. + */ + @Test + public void testHasNullaryConstructorFalse() { + assertFalse(InstantiationUtil.hasPublicNullaryConstructor(InstantiationUtil.class)); + } + @Test public void testClassIsProper() { assertTrue(InstantiationUtil.isProperClass(StringValue.class));