2014-01-29 105 views
2

我花了数小时研究这个,我仍然很困惑。那么....是否支持Java运算符重载?

我和许多其他人一样,在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

java.net链接不会去java.net – AntonH

+3

看起来更像C#,但我并不是专家。我想要解决的主要问题是使用'List','main'和'print'来实现编译。 Java在Collections API中没有'List'类,它有一个接口,它需要'length'方法看起来像'length()' – MadProgrammer

+0

这真的是java吗? – Baby

回答

12

确定性答案是否定的,除了String类型,Java不支持运算符重载。但更重要的是,对您的问题的更大回答是,您应该查看单个文档,即Java Language Specification or JLS,它将回答此问题以及有关Java是否包含的其他类似问题。不要与任何关于maybes或ifs的人辩论。去寻找你自己,并为自己满意,除了魔法字符串类型之外,没有Java运算符重载的东西。这些都在JLS中,这就是它的用途。