【发布时间】:2014-12-31 00:19:21
【问题描述】:
基本上,我正在为 Java 开发一个接口系统,我的接口由组件组成。请记住,我使用的是 OpenGL,因此标准侦听器不可用。
基本上我需要做的是找出界面的“点击”布尔值之一是否返回true,这是我编写的代码(希望成功)
if(Interface.interfaces.forEach((k, v)->v._clicked())) {
}
但是,这是不允许的。我所有的接口都是抽象的,并存储在HashMap<>。
基本上我想做的是以下几点:
if(!Interface.interfaces.forEach((k, v)->v._clicked())) {
// Handle game related code
}
_clicked() 方法(在执行一些逻辑后调用抽象 void clicked())将处理与接口相关的代码,因此不需要 else 语句。这样做的总体概念是让点击聊天框等不会让我的玩家与游戏世界互动。
我有大量的接口,所以以一种漂亮、整洁的方式迭代它们会很好。
如果我不能在这里使用 lambda,那是很不幸的,我知道我可以使用 for/each Entry 来做到这一点,但由于纯粹的丑陋,我想避免它。
【问题讨论】:
-
抱歉,没有更多代码,我不知道该怎么办。
forEach是什么样的?不知道它的参数列表是什么样的,或者k和v的类型,或者_clicked方法是什么样的,我不知道为什么不允许这样做或有什么帮助。 -
显然两位回答者已经读懂了你的想法,并弄清楚了
Interface.interfaces的类型。不幸的是,他们似乎提出了两种不同的想法。您可以通过告诉我们来帮助我们,这样我们就不必试图读懂您的想法。 -
@ajb - 显然,_clicked() 将是一个布尔值,因为它包含在一个无条件的 if() 语句中,我已经在问题中声明 Interface.interfaces 是一个
HashMap<>。跨度> -
其实你并没有说
interfaces是HashMap<>;您所说的只是“我所有的接口都是抽象的,并且存储在HashMap<>中”,这并没有真正说明interfaces标识符。你可能认为这很明显,但事实并非如此。如果您需要我们知道interfaces是HashMap,请明确说明或向我们展示代码。此外,如果它是HashMap,则其中两个答案(一个已删除)建议调用其stream()方法,而HashMap不存在该方法。
标签: java foreach lambda java-8