From f07e6a1b9de59331647b2c8dd54f696d59a8b902 Mon Sep 17 00:00:00 2001 From: Sam Brannen Date: Tue, 14 Sep 2021 16:05:29 +0200 Subject: [PATCH] Support char primitive default values in BeanUtils.instantiateClass() Closes gh-27390 --- .../org/springframework/beans/BeanUtils.java | 7 ++++--- .../springframework/beans/BeanUtilsTests.java | 18 +++++++++++++----- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java b/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java index 3d9f9000ef..8ddd6ff744 100644 --- a/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java +++ b/spring-beans/src/main/java/org/springframework/beans/BeanUtils.java @@ -87,9 +87,10 @@ public abstract class BeanUtils { values.put(byte.class, (byte) 0); values.put(short.class, (short) 0); values.put(int.class, 0); - values.put(long.class, (long) 0); - values.put(float.class, (float) 0); - values.put(double.class, (double) 0); + values.put(long.class, 0L); + values.put(float.class, 0F); + values.put(double.class, 0D); + values.put(char.class, '\0'); DEFAULT_TYPE_VALUES = Collections.unmodifiableMap(values); } diff --git a/spring-beans/src/test/java/org/springframework/beans/BeanUtilsTests.java b/spring-beans/src/test/java/org/springframework/beans/BeanUtilsTests.java index 5240d97f7a..b90fd515dc 100644 --- a/spring-beans/src/test/java/org/springframework/beans/BeanUtilsTests.java +++ b/spring-beans/src/test/java/org/springframework/beans/BeanUtilsTests.java @@ -98,30 +98,31 @@ class BeanUtilsTests { Constructor constructor = getBeanWithPrimitiveTypesConstructor(); assertThatExceptionOfType(BeanInstantiationException.class).isThrownBy(() -> - BeanUtils.instantiateClass(constructor, null, null, null, null, null, null, null, "foo", null)); + BeanUtils.instantiateClass(constructor, null, null, null, null, null, null, null, null, "foo", null)); } @Test // gh-22531, gh-27390 void instantiateClassWithOptionalPrimitiveTypes() throws NoSuchMethodException { Constructor constructor = getBeanWithPrimitiveTypesConstructor(); - BeanWithPrimitiveTypes bean = BeanUtils.instantiateClass(constructor, null, null, null, null, null, null, null, "foo"); + BeanWithPrimitiveTypes bean = BeanUtils.instantiateClass(constructor, null, null, null, null, null, null, null, null, "foo"); assertSoftly(softly -> { - softly.assertThat(bean.isFlag()).isEqualTo(false); + softly.assertThat(bean.isFlag()).isFalse(); softly.assertThat(bean.getByteCount()).isEqualTo((byte) 0); softly.assertThat(bean.getShortCount()).isEqualTo((short) 0); softly.assertThat(bean.getIntCount()).isEqualTo(0); softly.assertThat(bean.getLongCount()).isEqualTo(0L); softly.assertThat(bean.getFloatCount()).isEqualTo(0F); softly.assertThat(bean.getDoubleCount()).isEqualTo(0D); + softly.assertThat(bean.getCharacter()).isEqualTo('\0'); softly.assertThat(bean.getText()).isEqualTo("foo"); }); } private Constructor getBeanWithPrimitiveTypesConstructor() throws NoSuchMethodException { return BeanWithPrimitiveTypes.class.getConstructor(boolean.class, byte.class, short.class, int.class, - long.class, float.class, double.class, String.class); + long.class, float.class, double.class, char.class, String.class); } @Test @@ -659,12 +660,14 @@ class BeanUtilsTests { private long longCount; private float floatCount; private double doubleCount; + private char character; private String text; @SuppressWarnings("unused") public BeanWithPrimitiveTypes(boolean flag, byte byteCount, short shortCount, int intCount, long longCount, - float floatCount, double doubleCount, String text) { + float floatCount, double doubleCount, char character, String text) { + this.flag = flag; this.byteCount = byteCount; this.shortCount = shortCount; @@ -672,6 +675,7 @@ class BeanUtilsTests { this.longCount = longCount; this.floatCount = floatCount; this.doubleCount = doubleCount; + this.character = character; this.text = text; } @@ -703,6 +707,10 @@ class BeanUtilsTests { return doubleCount; } + public char getCharacter() { + return character; + } + public String getText() { return text; }