我有一个方法引用的数组列表(object :: method),我在用户单击按钮时插入一些方法。问题是我还需要在某些时候删除一些特定的方法引用。
如果我使用list.remove(object :: method),则不会删除该方法,因为每次使用时,lambda object :: method都有另一个ID。我希望每个object ::方法都是可移除的,所以我需要一种方法来为每个对象 - 方法对获得相同的lambda ID。
有没有办法实现这一点,还是我必须手动跟踪我添加的每个ID,以便删除它?
答案 0 :(得分:0)
从这个答案https://stackoverflow.com/a/29082592/2657100
方法引用或lambda表达式的目标类型应该是一个功能接口。仅基于此,运行时将创建一个类的实例,提供给定功能接口的实现。
尝试在列表中添加两次相同的方法引用。您会看到您有两个不同的对象,并且彼此调用equals
可能会返回false
。
因此,您将很难管理功能接口的实例,而无需像ID或反射Method
实例之类的辅助结构,或类似的东西。