有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用函数作为参数的java

public static <E extends EntityBase, FE>
FE findForeignEntity(E entities, Function<E, Long> fnForeignId, Function<Long, FE> fnFindIdIn) {
    if (entities == null) return null;
    Long fid = fnForeignId.apply(entities);
    return fnFindIdIn.apply(fid);
}

City city = Utils.findForeignEntity(candidate,
            c -> c.getAddress() != null ? c.getAddress().getCity() : null,
            fid -> cityRepo.findOne(fid));

“fid”代表什么?我不熟悉java中的这种用法。 谁能给我一个线索吗


共 (3) 个答案

  1. # 1 楼答案

    在方法findForeignEntity中传递3个参数,第一个参数是entities,它是方法fnForeignId的参数。 方法fnForeignId的结果是fid,而fid是方法fnFindIdIn的输入,该方法返回FE(外部实体)

    City city = Utils.findForeignEntity(candidate,
                c -> c.getAddress() != null ? c.getAddress().getCity() : null,
                fid -> cityRepo.findOne(fid));
    

    在这段代码中,让您困惑的可能是lambdas。我会尽量使它简单。方法findForeignEntity的两个参数是Function,这是一个^{},需要定义

    方法fnForeignId的定义是

    c -> c.getAddress() != null ? c.getAddress().getCity() : null
    

    这有点像

    return c.getAddress() != null ? c.getAddress().getCity() : null
    

    方法fnFindIdIn的定义是

    fid -> cityRepo.findOne(fid)
    

    这可以理解为

    return cityRepo.findOne(fid)
    

    这些都是在Java8中引入的lambda

    正如@GhostCat告诉我们的,fid代表外国id

  2. # 2 楼答案

    显然,fid缩写为“外来id”

    如果您询问->;语法:那是一个lambda expression。他们的主要目标是:

    Lambda expressions let you express instances of single-method classes more compactly.

    但很明显,这个概念背后有很多东西

  3. # 3 楼答案

    你在找lambda表达式吗?看看上面的java's documetation。lambda是将函数用作参数的一种很好的方法,但它永远只能是一行函数。一种快速的小方法