alibaba/QLExpress

希望能支持方法重载,这样有利于同一类功能的方法定义在一起。

Open

#418 ouverte le 22 déc. 2025

Voir sur GitHub
 (1 commentaire) (1 réaction) (0 assignés)Java (1 113 forks)batch import
help wanted

Métriques du dépôt

Stars
 (4 457 stars)
Métriques de merge PR
 (Merge moyen 17j) (4 PRs mergées en 30 j)

Description

希望能支持方法重载,这样有利于同一类功能的方法直接定义在一起。比如

public final class DateFunction {

  @QLFunction("date")
  public static LocalDate date() {
    return LocalDate.now();
  }


  @QLFunction("date")
  public static LocalDate date(final String value) {
    if (value == null) {
      throw new IllegalArgumentException("date() function value parameter cannot be null");
    }
    return LocalDate.parse(value);
  }


  @QLFunction("date")
  public static LocalDate date(final String value, final String format) {
    if (value == null) {
      throw new IllegalArgumentException("date() function parameter value cannot be null");
    }
    if (format == null) {
      throw new IllegalArgumentException("date() function parameter format cannot be null");
    }
    return LocalDate.parse(value, DateTimeFormatter.ofPattern(format));
  }
}

目前只能通过CustomFunction去间接处理,特别不方便,而且这样函数定义不够简洁。比如现在只能这样去定义

/**
 * date()
 * date(string)
 * date(string, format)
 *
 * @author zxuanhong
 * @date 2025-11-11 10:22
 * @since
 */
public class DateFunction implements CustomFunction {
  @Override
  public Object call(final QContext qContext, final Parameters parameters) throws Throwable {
    return switch (parameters.size()) {
      case 0 -> LocalDate.now();
      case 1 -> format(parameters.getValue(0), null);
      case 2 -> format(parameters.getValue(0), parameters.getValue(1));
      default -> null;
    };
  }


  private LocalDate format(final Object value, final Object format) {
    if (format == null) {
      return null;
    }
    final DateTimeFormatter formatter = DateTimeFormatter.ofPattern(format.toString());
    return format(value, formatter);
  }


  private LocalDate format(final Object value, final DateTimeFormatter formatter) {
    if (value == null) {
      return null;
    }
    if (formatter == null) {
      return LocalDate.parse(value.toString());
    }
    return LocalDate.parse(value.toString(), formatter);
  }
}

Guide contributeur