gpt4 book ai didi

java - 如何在定义后立即按顺序重用代码?

转载 作者:行者123 更新时间:2023-12-01 18:12:52 25 4
gpt4 key购买 nike

我想连续执行许多简单的操作。在java中,我偶尔会使用方法作为过程,如下所示:

doA(x);
doB(x, 1);
doB(x, 2);
doC(x);

它可以完成我想要的一切,但很难看,而且事件的顺序也不是那么清晰。我经常这样做:

(A part I)
(A part II)
(B part I)
(B part II)
(B part III)
(C part I)
(C part II)
(C part III)
(C part IV)

这对于理解代码非常有用,因为如果操作很简单(例如,带有一点流量控制的字符串操作),您可以准确地看到计算机执行的事件的顺序。
当我想做 B,然后做一些与 B 类似但有点不同的事情时,问题就出现了。我想重用这些代码,以防我需要对 B 的两个实例进行更改。在其他语言中,我经常将该代码留在中间,但将其放入一个小的 lambda 中,并使用不同的参数执行两次。它可能看起来像这样:

(A part I)
(A part II)
define makeB:
(B part I)
(B part II)
(B part III)
x = makeB(true);
y = makeB(false);
(C part I)
(C part II)
(C part III)
(C part IV)

这是从上到下可读的,并且很清楚 B 如何只是这个过程的一部分,不属于其他任何地方。
java lambda 是否适用于此? java 中 lambda 背后的宏伟目标似乎与我的目标完全不同。如果它们适用,我如何将它们用于简单的代码,例如字符串操作?如果不是,是否有其他工具可以解决我在第一种方法中表达的问题?

最佳答案

在线阅读有关 lambda 的内容,尤其是教程(Oracle 官方的和非官方的)给我留下了错误的印象,因为大多数都是关于为专门任务创建新的函数接口(interface)。感谢用户kaya3对我的结论提出质疑。

我发现你可以使用Function<T,R>来自java.util.function对于像我这样的用例,它不需要任何进一步的设置。

Function<Boolean, String> makeB = (Boolean bee) -> {...}
x = makeB.apply(true);
y = makeB.apply(false);

评论要求提供实际代码,我欠它。不是最终版本,但这是我目前使用 lambda 的方式。它不适用于字符串操作,但这是我手头的一个示例。我确实计划稍后将其实际用于字符串操作。

rootElement.addChildElement(StructureElement.newStructureElement("HiddenTag", false, false, 10f, null, null, MultiplicityEnum.ZERO_OR_MORE,
Arrays.asList(areaOfUsageHiddenTag, stylisticHiddenTagPattern, otherHiddenTagPattern),
null, trimCommaTransformers, (List) null)
.addPrefixElement(nonMandatorySpace)
);

Function<Boolean, StructureElement> newMeaningBlock = (Boolean numberRequired) -> StructureElement.newStructureElementNoParse("MeaningBlock", MultiplicityEnum.ZERO_OR_MORE)
.addChildElement(StructureElement.newStructureElement("MeaningNumber", true, false, 12f, null, null, numberRequired ? MultiplicityEnum.ONE : MultiplicityEnum.ZERO_OR_ONE, meaningNumberPattern, null, trimCommaTransformers).addPrefixElement(nonMandatorySpace))
.addChildElement(meaningBlock2)

.addChildElement(StructureElement.newStructureElementNoParse("AdditionalMeaningBlock", MultiplicityEnum.ZERO_OR_MORE)
.addChildElement(StructureElement.newStructureElement("MeaningShade", false, false, 12f, null, null, MultiplicityEnum.ONE_OF_MANY, meaningShadePattern, null, trimCommaTransformers)
.addPrefixElement(nonMandatorySpace)
.addChildElement(shadeMeaningBlock)
)
.addChildElement(StructureElement.newStructureElement("BevGender", true, false, 12f, null, null, MultiplicityEnum.ONE_OF_MANY, headerPattern, null, trimCommaTransformers)
.addPrefixElement(nonMandatorySpace)
.addChildElement(StructureElement.newStructureElement("BevGenderTag", false, false, 10f, null, null, MultiplicityEnum.ONE, bevGenderTagPattern, null, trimCommaTransformers)
.addPrefixElement(nonMandatorySpace))
.addChildElement(nonMandatorySpace)
.addChildElement(StructureElement.newStructureElementNoParse("MeaningIllustrationBlock", MultiplicityEnum.ZERO_OR_MORE)
.addChildElement(StructureElement.newStructureElement("MeaningIllustration", false, true, 12f, null, null, MultiplicityEnum.ONE_OF_MANY, meaningIllustrationPattern, null, trimCommaTransformers)
.addPrefixElement(nonMandatorySpace)
.addChildElement(StructureElement.newStructureElement("MeaningIllustrationDef", false, false, 12f, null, null, MultiplicityEnum.ZERO_OR_ONE, meaningIllustrationDefPattern, null, null))
)
.addChildElement(StructureElement.newStructureElement("Tag", false, false, 10f, null, null, MultiplicityEnum.ONE_OF_MANY,
Arrays.asList(areaOfUsageTag, stylisticTagPattern, otherTagPattern),
null, trimCommaTransformers, (List) null)
.addPrefixElement(nonMandatorySpace)
.addChildElement(nonMandatoryDot)
)
)
)
);

rootElement.addChildElement(newMeaningBlock.apply(false));
rootElement.addChildElement(newMeaningBlock.apply(true));

还有更多rootElement.addChildElement(...)在此之前和之后的语句都同样重要,尤其是在调试期间引用它时。我省略了所有的陈述,只保留了一些陈述来概述重要的部分。我本来可以使用 XML 或 JSON 来编码该结构并在 java 中读取它,但我选择了这种方式,它成功地避免了仅与 XML 或 JSON 相关的问题。这在未来将适用于不仅仅是创建结构的实际代码。

关于java - 如何在定义后立即按顺序重用代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60432271/

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