【问题标题】:what is these methods "with" and "and" in java? [closed]java中的“with”和“and”这些方法是什么? [关闭]
【发布时间】:2013-05-30 03:39:16
【问题描述】:

我正在审查一个新的项目代码。我找到了以下行:

 crudService.findByNamedQueryFirstResult("TableA.findby.custid", with(
                "custID", IndividulaID).and("flags", custflags).parameters())

我在任何类中都看不到“with”和“and”方法。而且它不是字符串连接。 我知道 JPQ 查询具有和和。但是怎么可能像上面那样传递参数呢?

有人可以帮忙吗?

【问题讨论】:

  • 您可以判断它们不是关键字,因为它们需要参数。所以这些是方法。它们可能与 crudservice 在同一个 jar 中定义。
  • 另外,检查static imports

标签: java jpa methods keyword


【解决方案1】:

Java 中没有 withand 关键字。这些是方法调用。

这里,with() 方法是通过静态导入(参见@damo 的注释)导入的,并创建了一个构建器类的实例; and() 方法是一个返回 this 的方法;然后.parameters() 类将构建该类,并返回调用方法实际需要的内容。这是一个经典的构建器模式。

静态导入可用于提高可读性。考虑模仿。要么你写:

Mockito.when(xxx).then(xxx);

或:

import static org.mockito.Mockito.*;

// the compiler know where `when()` comes from
when(xxx).then(xxx);

此类构造的通用模式称为流畅接口。为了完成答案,我只想指出我为我的一个项目所做的事情:

ProcessorSelector<IN, OUT> selector = new ProcessorSelector<IN, OUT>();

selector = selector.when(predicate1).then(p1)
    .when(predicate2).then(p2)
    .otherwise(defaultProcessor);

final Processor<IN, OUT> processor = selector.getProcessor();

ProcessorSelector 类有一个when() 方法;此方法返回另一个类,其中有一个then() 方法;并且then() 方法再次返回一个ProcessorSelector,它具有when() 等。最后,otherwise() 方法返回一个ProcessorSelector,在该.getProcessor() 上返回一个Processor

【讨论】:

    【解决方案2】:

    这看起来像一个 fluent-api(一般定义见 http://java.dzone.com/articles/java-fluent-api-designer-crash

    在您的情况下,它可能是 spring-jpa、QueryDSL 或类似框架。

    要识别 API,您应该查看 crudService 的类型/超类/接口以及 with/and/parameters 的定义。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-12-20
      • 2021-01-31
      • 1970-01-01
      • 1970-01-01
      • 2011-07-02
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多