Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 这些方法是什么;加上;及;及;在爪哇?_Java_Jpa_Methods_Keyword - Fatal编程技术网

Java 这些方法是什么;加上;及;及;在爪哇?

Java 这些方法是什么;加上;及;及;在爪哇?,java,jpa,methods,keyword,Java,Jpa,Methods,Keyword,我正在审查一个新的项目代码。我发现了以下几行: crudService.findByNamedQueryFirstResult("TableA.findby.custid", with( "custID", IndividulaID).and("flags", custflags).parameters()) 我在任何类中都没有看到带“and”和“and”的方法。它不是字符串连接。 我知道JPQ查询有with和and。但是怎么可能像上面那样传递参数呢 有人能帮

我正在审查一个新的项目代码。我发现了以下几行:

 crudService.findByNamedQueryFirstResult("TableA.findby.custid", with(
                "custID", IndividulaID).and("flags", custflags).parameters())
我在任何类中都没有看到带“and”和“and”的方法。它不是字符串连接。 我知道JPQ查询有with和and。但是怎么可能像上面那样传递参数呢


有人能帮忙吗

Java中没有带或和关键字的
。这些是方法调用

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

静态导入可用于获得良好的可读性效果。考虑一下莫基托。要么你写:

Mockito.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选择器=新的ProcessorSelector();
选择器=选择器。当(谓词1)。然后(p1)
.when(谓词2)。然后(p2)
。否则(默认处理器);
最终处理器=选择器.getProcessor();

ProcessorSelector
类有一个
when()
方法;此方法返回另一个类,该类上有
then()
方法;然后,
then()
方法再次返回一个
ProcessorSelector
,它有
when()
,等等。最后,
otherwise()
方法返回一个
ProcessorSelector
,您在它上面有一个
.getProcessor()
返回一个
处理器这看起来像一个流畅的api(见一般定义)

在您的情况下,它可能是SpringJPA、QueryDSL或类似的框架


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

您可以看出它们不是关键字,因为它们需要参数。因此这些是方法。它们可能与crudService定义在同一个jar中。此外,请检查
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();