static <T> List<T> parseArray(String text, Type[] types, JSONReader.Feature... features) {
        if (text == null || text.isEmpty()) {
            return null;
        }

        final JSONReader.Context context = JSONFactory.createReadContext(features);
        try (JSONReader reader = JSONReader.of(text, context)) {
            if (reader.nextIfNull()) {
                return null;
            }

            reader.startArray();
            List<T> array = new ArrayList<>(types.length);
            for (int i = 0; i < types.length; i++) {
                array.add(
                        reader.read(types[i])
                );
            }
            reader.endArray();
            if (reader.resolveTasks != null) {
                reader.handleResolveTasks(array);
            }
            if (reader.ch != EOI && (context.features & IgnoreCheckClose.mask) == 0) {
                throw new JSONException(reader.info("input not end"));
            }
            return array;
        }
    }
Parses the json string as a list of {@link T}. Returns {@code null}
if received {@link String} is {@code null} or empty or its content is null.

@param text the specified string to be parsed
@param types the specified actual parameter type
@param features the specified features is applied to parsing
@return {@link List} or {@code null}
@throws JSONException If a parsing error occurs
core/src/main/java/com/alibaba/fastjson2/JSON.java