Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/361.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 模式匹配框架?_Java_Gwt_Pattern Matching - Fatal编程技术网

Java 模式匹配框架?

Java 模式匹配框架?,java,gwt,pattern-matching,Java,Gwt,Pattern Matching,我将很快处理一个Java(GWT)项目()。也许我想在这里扩展一下,但我想知道是否有用Java编写的“模式匹配框架”(不知道是否有这个术语)?(也许是因为我长期接触二郎,所以我一直在思考模式:——) 我将使用“消息传递”体系结构在Java组件之间进行通信,我希望有效地将消息与操作“匹配” 也许我应该坚持使用本地化的状态机,或者还有其他什么吗 已更新:一条“消息”将是一个携带“仅数据”的实例对象。我目前不打算使用继承来向上述消息传递语义,而是简单的属性 更新2:在录制了SO()的集体智慧之后,似乎

我将很快处理一个Java(GWT)项目()。也许我想在这里扩展一下,但我想知道是否有用Java编写的“模式匹配框架”(不知道是否有这个术语)?(也许是因为我长期接触二郎,所以我一直在思考模式:——)

我将使用“消息传递”体系结构在Java组件之间进行通信,我希望有效地将消息与操作“匹配”

也许我应该坚持使用本地化的状态机,或者还有其他什么吗

已更新:一条“消息”将是一个携带“仅数据”的实例对象。我目前不打算使用继承来向上述消息传递语义,而是简单的属性

更新2:在录制了SO()的集体智慧之后,似乎Scala也超出了范围


(注意:这里是Java新手…请温柔些)

我认为模式匹配需要的是,根据您的描述,您将拥有一个消息就是事件的位置


不要那样做。相反,使用实际对象作为消息,这样您就不必解析任何东西(这很慢),只需匹配类型并检查相关指令(这很快)以获得实际操作。从所有这些中创建一个状态机也不是一个坏选择。

您可能要寻找的是(元组空间的Java实现)和基于属性的匹配对象(在Javaspace世界中称为“条目”)

空间存储具有特定属性或条目的对象(例如关联的货币、城市、用户等)。然后,可以通过指定0个或多个此类条目从空间中选择对象,从而返回0个或多个对象。因此,它是一种非常有用的模式,特别适用于消息传递和生产者/消费者场景


因此,您可以存储具有特定属性(例如,消息类型、使用者类型等)的对象(消息),并且您的使用者将基于一组0或更多属性选择这些对象。请注意,这不需要修改正在存储的基础对象。您可以运行进程中的空间(在一个JVM中)——这不仅仅是一种网络存储模式。

模式匹配通常与正则表达式有关。我认为你想要的更多的只是一个用于对象间交互的“消息传递”系统?听起来很像Scala case类。。。也许看看这个?(对不起,我不太熟悉)scala。。。六羟甲基三聚氰胺六甲醚。。。我对斯卡拉一无所知@杰森:你应该写一个答案(我对投稿人很温和,因为我的个人资料清楚地显示了这一点)。你有没有一个具体的例子来说明一条信息,以及它将如何影响你可以向我们展示的一个行动?像Nick一样,我也立即想到了正则表达式,但我想你对它们很熟悉,因为它们在Erlang和大多数其他语言中都有。模式匹配是函数式编程语言的一个功能,与正则表达式无关。Scala支持模式匹配,但我认为GWT编译器不支持Scala。它只从纯Java编译,带有核心Java库的一个子集。接收“消息”可以被视为“事件”,但我没有提到正则表达式,在这里我也不会这样做:这些显然(至少在我看来,对不起;-)超出了范围。事件就是消息,然而,信息的形式很重要,这样你就可以正确、快速地使用它了。。。谢谢