gpt4 book ai didi

用于定义与 CFG 匹配的调用模式的 Java 习惯用法

转载 作者:行者123 更新时间:2023-11-30 05:01:15 25 4
gpt4 key购买 nike

假设一种简单的类似 XML 的文档格式,具有两个终端元素和一个递归嵌套元素...假设目标是使用 Java 类型系统构造字符串,以允许新的(语法上有效的)文档被干净地定义尽可能使用Java。我正在设想一个可以隐藏在类库中的基类 - 然后使各个文档的定义尽可能直观和简洁。

暂时忽略递归嵌套元素 - 此代码代表一种潜在可行的方法:-

public class StaticDocument {
private StringBuilder doc;
protected StaticDocument() {}
protected void nonNestedA() { doc.append("<A/>"); }
protected void nonNestedB() { doc.append("<B/>"); }
public String toString() { return doc.toString(); }
}

使用StaticDocument作为基类,可以仅使用Java来定义文档来描述其抽象结构。 A 和 B 元素按顺序组合的示例文档:-

public class ExampleDocument extends StaticDocument
{
public ExampleDocument()
{
nonNestedA();
nonNestedB();
nonNestedA();
}
}

当尝试扩展这种方法以包含递归嵌套元素时,事情变得有点复杂......在 C++ 中,我可能使用 StaticDocument 的 protected 内部类来定义 Z 元素 - 然后使用封闭 block 确保每个文件都与使用 RAII 习语/模式匹配的示例文档。在 C# 中,我可以利用 IDisposable 接口(interface)并“使用”达到类似的目的。另一种可能性是将参数传递给nestedZ方法,并让该参数封装要执行的内容以生成Z元素包围的文档...但这有点麻烦 - 特别是因为Java(6)不支持委托(delegate)或原生 lambda 表达式。

[旁白:我知道像 JaxB for XML 这样的工具......并且我可以将 XML 文件嵌入到 jar 中 - 但这里的问题旨在捕获更复杂的目标 - XML 只是展示相同的抽象结构.]

所以..最后...问题是:Java 社区对于解决此类问题的最佳方法是否达成共识?目标是在构建文档期间最大程度地减少无关的中间对象,并使文档的构建尽可能紧凑且“自然”(即易于识别为与相应的 XML 文档相匹配)。

我有兴趣听到一些专家意见...和/或相关文章的提示。

最佳答案

您可以使用builder design pattern并使用 fluent interface 创建可嵌套的构建器这将代表您想要的结构。

This examples使用它们来创建测试数据对象。但它也适用于您的场景。

关于用于定义与 CFG 匹配的调用模式的 Java 习惯用法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6627479/

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