gpt4 book ai didi

java - Java 中是否有一种方法可以创建或模拟您自己的类似于 "+="的语法?不重载

转载 作者:行者123 更新时间:2023-11-29 09:52:03 24 4
gpt4 key购买 nike

编辑:我重写了这个问题,希望它更容易理解。

我不想重载!

如果你有如下代码:

ImmutableObject mutableReference = new ImuttableObject();

mutableReference = mutableReference.doStuff(args);

编译时或预编译时进程能否替换已定义的文本格式?例如:

定义 X.=Y AS X = X.Y

可以代替
mutableReference .= doStuff(args)mutableReference = mutableReference.doStuff(args);

所以一些进程知道“.=”之前的代码是X,之后是Y。类似于语法糖,在编译之前或期间,只需将X.=Y替换为X = X.Y即可。

以下是问题的旧版本。

由于找不到更好的词,我有以下“形式”的代码。

turnStates = turnStates.add(currentState); // log end of turn state.

//turnStates.=add(currentState);
//turnStates=.add(currentState);

其中 turnStates 可以是对任何不可变对象(immutable对象)的引用。我希望它看起来像代码被注释掉或类似。就像具有++ 和 += 的整数一样,我想要一种为我的不可变对象(immutable对象)编写自己的方法。

我想我想起了 C++ 中的一些预处理器内容,我认为它们可以替换代码片段的预定义文本。我想知道 java 中是否有一种方法可以定义一个过程,用于在编译时将我想要的代码替换为工作代码。

我确定您可以让 IDE 执行此操作,但是您无法与未运行预配置 IDE 的其他人共享代码。

编辑:

turnStates 是不可变的,并在调用 add 时返回不同的对象。它是测试代码,我有我的理由为什么列表,或者因为它现在更像一个堆栈,是不可变的。与问题无关,因为我可以简单地将其替换为player = player.doSomething(args) 其中 doSomething(args) 返回一个 Player 实例。 Player 只是模型的一小部分,不可变是无成本的。

我知道在 Java 中无法更改重载和语法。正如我最初试图描绘的那样,很抱歉,如果它没有以这种方式出现是:

我希望我不知道与可能在编译前替换文本的 @ 符号有关的语法。例如:

DEFINE X.=Y AS X = X.Y 其中 X = turnStates 和 Y = add() 在我的示例中。

但正如我赞成的答案所说。我将检查 Scala,因为答案似乎是否定的。

最佳答案

。 Java 明确支持用户定义数据类型的运算符重载。然而,scala是一种 JVM 托管语言并且 does .

关于java - Java 中是否有一种方法可以创建或模拟您自己的类似于 "+="的语法?不重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43358204/

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