那么.... Java是否支持运算符重载?

时间:2014-01-29 00:59:28

标签: java operator-overloading

我花了几个小时研究这个,我仍然很困惑。

我和其他许多人一样,在Google上搜索过此内容并找到了this SO thread

然而,最近,我的一个编程课程的学生告诉我这不是真的,事实上,教练验证了它。见鬼,整个班级都听到了,没有人质疑他。 He offered this link from Java.net as proof

我立即对他说,“这看起来像是JavaScript,”但他指的是这一部分:

class User {
  List roles;

  User() {
    roles = new List();
  }

  operator +(Role newRole) {  
    this.roles.add(newRole); 
  }  
}

main() {
  User alice = new User();
  Role adminUser = new Role("TIMESHEET_ADMIN", 3);

  alice + adminUser; 
  print(alice.roles.length); 
}

告诉我这确实是Java。我没有JS的经验无法分辨,他离开了(现在),但我尝试将它放入我的IDE(IntelliJ),并且我被编译器错误攻击了。我甚至不知道从哪里开始修复它们,但主要的是cannot resolve symbol "operator"

我不是在寻找有关Java's built-in operator overloading的任何讨论,我正在寻找一个关于Java中的用户是否可以自己重载运算符的明确答案。

1 个答案:

答案 0 :(得分:12)

明确的答案是否定的,除了String类型之外,Java不支持运算符重载。但更重要的是,对您的问题的一个更大的答案是,您应该查看单个文档,Java Language Specification or JLS将回答这个以及任何其他类似的关于Java包含或不包含的内容的问题。不要与任何人讨论maybes或ifs。去寻找自己,并为自己满足除了神奇的String类型之外没有Java的运算符重载这样的东西。它就在JLS中,这就是它的用途。