编辑:我已经重写了这个问题,希望能让它更容易理解.
我不想超载!
如果您有以下代码:
ImmutableObject mutableReference = new ImuttableObject();
mutableReference = mutableReference.doStuff(args);
Run Code Online (Sandbox Code Playgroud)
编译时或预编译时可以替换定义的文本格式吗?例如:
DEFINE X.=Y AS X = X.Y
可取代
mutableReference .= doStuff(args)用mutableReference = mutableReference.doStuff(args);
因此,某些过程知道".="之前的代码是X,之后是Y.类似于语法糖,在编译之前或期间,只需用X = XY替换X. = Y
以下是问题的旧版本.
由于缺少更好的单词,我有以下"形式"的代码.
turnStates = turnStates.add(currentState); // log end of turn state.
//turnStates.=add(currentState);
//turnStates=.add(currentState);
Run Code Online (Sandbox Code Playgroud)
其中turnStates可以是对任何不可变对象的引用.我希望它看起来像注释掉或类似的代码.就像有++和+ =的整数一样,我想为自己的不可变量编写自己的方法.
我想我记得一些来自C++的预处理器东西,我认为它可以取代代码片段的预定义文本.我想知道在java中是否有一种方法可以定义在编译时替换所需代码的过程.
我确信您可以让IDE执行此操作,但是您无法与未运行预配置IDE的其他人共享代码.
编辑:
turnStates是不可变的,并在要添加的调用中返回不同的对象.它是测试代码,我有我的理由为什么列表,或者它现在更像是一个堆栈,是不可变的.无关,因为我可以简单地将其替换为的问题
player = player.doSomething(args),其中doSomething(args)返回一个Player实例.玩家只是模型的一小部分,不可改变是不可改变的.
我知道在Java中无法更改Overloads和语法.当我试图描绘最初时,抱歉,如果它没有遇到这种方式是:
我希望我不知道在编译之前可能替换文本的@符号的语法.例如:
DEFINE X.=Y AS X = X.Y 其中X = turnStates,Y = add()在我的例子中.
但正如我提出的答案所说的那样.我会查看Scala,因为答案似乎是否定的.
java ×1