当前位置: 首页 > 知识库问答 >
问题:

Java Lambda可以有状态吗?

单于俊智
2023-03-14

在关于lambdas和匿名类之间差异的一个论点中,在本文中:

Java8 Lambdas与匿名类

我读到一条声明,“lambda可以有状态”,就像匿名类实例一样。

据我所知,您无法添加专门属于lambda的用户定义状态,因为无法在java lambda函数的实现上定义实例成员。

例如:

Runnable r=  () -> { int x = 5;  }; // defines a local - no way to define instance
Runnable r2 = new Runnable() {
    int x;  // defines state via instance member
    @Override
    public void run() {
        // TODO Auto-generated method stub

    }
};

我只是想澄清一下,我并不是想把状态引入lambda,因为我认为这违背了我的意图。我只是想验证或反驳一位知名人士就上述堆栈溢出问题提出的技术性声明。

共有3个答案

姬承教
2023-03-14

简短的答案?没有长的答案?lambdas并不意味着有状态。lambdas的总体思想是基于具有一次性函数。请阅读lambda留档了解更多详细信息。http://www.oracle.com/webfolder/technetwork/tutorials/obe/java/Lambda-QuickStart/index.html希望这有所帮助。

吴伟志
2023-03-14

不确定你所说的州是什么意思。如果你的问题是“lambda是否可以携带值,每次我调用同一个lambda时都可以记住这些值”,那么答案是否定的。你可以采取一些技巧来实现这种行为,但它们不是用于此目的的。如果你想有一个“状态”,那么最好使用类!

如果这不是你的意思,请告诉我!

狄晟睿
2023-03-14

尽管lambda函数没有类似实例变量的变量,但它可以更新某些状态。根据您对此的看法,可以说lambda函数有自己的状态。

例如。

Supplier<Integer> makeCountingLambda() {
    final int[] counter = new int[1];
    return (() -> ++counter[0]);
}

Supplier<Integer> f = makeCountingLambda();
f.get(); // 1
f.get(); // 2

f是一个lambda函数。每次调用get()时,它都会提供一个新值,因为它的状态已更新。

类似的事情似乎就是引用的评论所描述的。

 类似资料:
  • 问题内容: 需要使用一对多和多对一关系。这是我对象中的双向关系,因此我可以从任一方向来回移动。是推荐的解决方法,但是,我听不懂。有人可以解释: 推荐的使用方式是什么? 它解决什么目的? 就我的示例而言,这是带有注释的类: 拥有许多 许多 属于一个 A 航空公司: 航空公司航班: 编辑: 数据库模式: AirlineFlights具有idAirline作为ForeignKey,而Airline没有i

  • 问题内容: 有人可以在hibernate状态下向我解释吗?我很难理解它。 如果可以举一个例子来解释它,那就最棒了,并且它在哪种用例中最适用? 问题答案: 这是Object DB的一个很好的解释。 指定ManyToOne或OneToOne关系属性,该属性提供EmbeddedId主键,EmbeddedId主键内的属性或父实体的简单主键的映射。value元素指定关系属性所对应的组合键中的属性。如果实体的

  • 因为我希望在GAE flexible中构建我的所有微服务,所以我考虑使用相同的过程,即部署另一个定制的Dockerfile来构建我的Mongodb实例。 现在我想知道这是否是正确的方法?在这种情况下,我担心Mongodb实例的状态丰满性。当实例重新启动或部署另一个版本时,数据会丢失吗?对于我正在尝试做的事情,是否有其他更推荐的方法? PS:我不想使用Google Datastore,主要是因为我使

  • 可变状态 数据是不可变的, 但是通过引用实现的状态是可以改变的. Atom Atom 在 Clojure 中可以用于处理事务操作, cljs 由于是单线程, 玩不转. 不过 Atom 还是用于表示单个同步的状态修改, 用法一般是: (def *a (atom 1)) @*a (reset! *a 2) (swap! *a inc) swap! 实际上是一个 Macro, 应对 (reset! *a

  • 帮助用户快速部署有状态的应用。 有状态应用即Statefulset。Statefulset的详细介绍内容,请参考kubernets官方文档-Statefulsets。 Pod是Kubernetes的最小编排单位,有状态statefulset主要用于部署实例之间有不对等关系,以及实例对外部数据有依赖关系的有状态应用。基于statefulset部署的应用有以下特点: 基于statefulset部署的p

  • 本文向大家介绍可以用微服务创建状态机吗?相关面试题,主要包含被问及可以用微服务创建状态机吗?时的应答技巧和注意事项,需要的朋友参考一下 我们知道拥有自己数据库的每个微服务都是一个可独立部署的程序单元,这反过来又让我们可以创建一个状态机。因此,我们可以为特定的微服务指定不同的状态和事件。 例如,我们可以定义 Order 微服务。订单可以具有不同的状态。Order 状态的转换可以是 Order 微服务