Skip to content

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

@zxuanhong

Description

@zxuanhong

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

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);
  }
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions