gpt4 book ai didi

java - 接口(interface)能否以某种方式阻止 lambda 表达式的实现?

转载 作者:塔克拉玛干 更新时间:2023-11-03 03:50:00 25 4
gpt4 key购买 nike

背景

我将以下接口(interface)作为 API 的一部分公开:

public interface Pasture {
/**
* @param t The time of the visit (as measured from optimization starting point).
* @param tLast The time of the preceding visit (as measured from optimization starting point).
* @return The expected reward that will be reaped by visiting under the given conditions.
*/
double yield(long t, long tLast);
}

客户端将“牧场”模型作为实现此接口(interface)的对象传递给我。每个对象代表一个牧场。

在我这边的 API 中,我在不同时间跟踪对这些对象的“访问”,然后在我需要知道有多少牧场时调用 pasture.yield(time, lastVisitTime)会同时产生。

问题来了,这个接口(interface)可以在客户端实现为lambda表达式,apparently each lambda expression instantiation does not necessarily create a new object with a new identity ,这是我用来跟踪在什么时间访问了哪些牧场的依据。

问题

有没有一种方法可以防止接口(interface)被实现为 lambda 表达式,而是强制客户端将其实现为匿名类。当然,向其中添加一个虚拟方法就可以解决问题,但在我看来,那将是随意且不整洁的。还有别的办法吗?

最佳答案

您的问题不是 lambda 边界情况。

您正在做一个假设,即同一个对象代表同一个牧场,因此让您的对象同时做两件事。那是一种代码味道,是您遇到困难的原因。

你应该强制你的 Pasture 对象实现类似 equals 的东西,这样你就可以检查项目是否相同。遗憾的是,没有接口(interface)可以做到这一点,最接近的是Comparable

public interface Pasture extends Comparable<Pasture> {

关于java - 接口(interface)能否以某种方式阻止 lambda 表达式的实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32067311/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com