首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在Java中是否有类似于"+=“的方法来创建或模仿您自己的语法?非过载

在Java中是否有类似于"+=“的方法来创建或模仿您自己的语法?非过载
EN

Stack Overflow用户
提问于 2017-04-12 00:15:25
回答 2查看 84关注 0票数 1

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

我不想超载!

如果您有以下代码:

代码语言:javascript
代码运行次数:0
运行
复制
ImmutableObject mutableReference = new ImuttableObject();

mutableReference = mutableReference.doStuff(args);

编译时间或预编译时间过程可以替换定义的文本格式吗?例如:

DEFINE X.=Y AS X = X.Y

可以取代

mutableReference .= doStuff(args)mutableReference = mutableReference.doStuff(args);

因此,一些进程知道".=“之前的代码是X,后面是Y。类似于语法糖,编译前或编译期间,只需将X.=Y替换为X= X.Y。

下面的是这个问题的旧版本.

我有以下的“形式”的代码,因为没有一个更好的词。

代码语言:javascript
代码运行次数:0
运行
复制
turnStates = turnStates.add(currentState); // log end of turn state.

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

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

我想我还记得C++中的一些预处理器内容,我认为这些东西可以代替预定义的代码片段文本。我想知道在java中是否有一种方法可以在编译时为工作代码定义一个进程来替换我想要的代码。

我相信你可以让IDE来做这件事,但是你不能和其他没有运行预先配置好的IDE的人共享代码。

编辑:

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

我知道在Java中重载和语法是不能改变的。正如我最初试图描绘的那样,如果没有遇到这样的情况,很抱歉:

我希望我没有意识到语法可能与@符号有关,它可以在编译之前取代文本。例如:

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

但正如我投票时所说的那样。我将查看Scala,因为答案似乎是否定的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-04-12 00:17:33

No..Java显式地为用户定义的数据类型执行而不是支持操作符重载。然而,斯卡拉是一种JVM托管语言和有吗?

票数 9
EN

Stack Overflow用户

发布于 2017-04-12 01:58:40

与C++不同,overloading.But不支持运算符overloading.But Scala或Groovy。Scala可以集成到Java中,但Java仍然不直接支持操作符重载集成部分,因为您将无法使用操作符本身,而只能使用@eq(.)对于"=“操作符。如果您想了解Scala与java的集成,请查看此链接以获得更多细节。

底线: Java不支持操作符重载​

如果您的项目需要大量的向量加法、减法等,即许多自定义操作符,那么一个很好的建议是使用C#作为您选择的语言,这是一种类似Java的语言。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43358204

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档