public static Class<?> desc2class(String desc) throws ClassNotFoundException {
        return desc2class(ClassUtils.getClassLoader(), desc);
    }
@Test
    void testDesc2Class() throws Exception {
        assertEquals(void.class, ReflectUtils.desc2class("V"));
        assertEquals(boolean.class, ReflectUtils.desc2class("Z"));
        assertEquals(boolean[].class, ReflectUtils.desc2class("[Z"));
        assertEquals(byte.class, ReflectUtils.desc2class("B"));
        assertEquals(char.class, ReflectUtils.desc2class("C"));
        assertEquals(double.class, ReflectUtils.desc2class("D"));
        assertEquals(float.class, ReflectUtils.desc2class("F"));
        assertEquals(int.class, ReflectUtils.desc2class("I"));
        assertEquals(long.class, ReflectUtils.desc2class("J"));
        assertEquals(short.class, ReflectUtils.desc2class("S"));
        assertEquals(String.class, ReflectUtils.desc2class("Ljava.lang.String;"));
        assertEquals(int[][].class, ReflectUtils.desc2class(ReflectUtils.getDesc(int[][].class)));
        assertEquals(ReflectUtilsTest[].class, ReflectUtils.desc2class(ReflectUtils.getDesc(ReflectUtilsTest[].class)));

        String desc;
        Class<?>[] cs;

        cs = new Class<?>[] {int.class, getClass(), String.class, int[][].class, boolean[].class};
        desc = ReflectUtils.getDesc(cs);
        assertSame(cs, ReflectUtils.desc2classArray(desc));

        cs = new Class<?>[] {};
        desc = ReflectUtils.getDesc(cs);
        assertSame(cs, ReflectUtils.desc2classArray(desc));

        cs = new Class<?>[] {void.class, String[].class, int[][].class, ReflectUtilsTest[][].class};
        desc = ReflectUtils.getDesc(cs);
        assertSame(cs, ReflectUtils.desc2classArray(desc));
    }