public static void processJacksonJsonFormat(BeanInfo beanInfo, Annotation annotation) {
        Class<? extends Annotation> annotationClass = annotation.getClass();
        BeanUtils.annotationMethods(annotationClass, m -> {
            String name = m.getName();
            try {
                Object result = m.invoke(annotation);
                switch (name) {
                    case "pattern":
                        String pattern = (String) result;
                        if (!pattern.isEmpty()) {
                            beanInfo.format = pattern;
                        }
                        break;
                    case "shape":
                        String shape = ((Enum) result).name();
                        if ("NUMBER".equals(shape)) {
                            beanInfo.format = "millis";
                        } else if ("OBJECT".equals(shape)) {
                            beanInfo.writeEnumAsJavaBean = true;
                        }
                        break;
                    case "locale":
                        String locale = (String) result;
                        if (!locale.isEmpty() && !"##default".equals(locale)) {
                            beanInfo.locale = Locale.forLanguageTag(locale);
                        }
                        break;
                }
            } catch (Throwable ignored) {
                // ignored
            }
        });
    }
The WildcardType interface supports multiple upper bounds and multiple
lower bounds. We only support what the Java 6 language needs - at most one
bound. If a lower bound is set, the upper bound must be Object.class.
core/src/main/java/com/alibaba/fastjson2/util/BeanUtils.java