2014-10-18 137 views
0

我知道String是java.lang中的最后一个类,所以像string类是可以使用加号(+)运算符追加其他类。是否可以添加类?

比如我有一个类:

public class Foo{ 
    public int x; 
    public int y; 
    public Foo(int x,int y){ 
     this.x=x; 
     this.y=y; 
    } 
    public Foo append(int x,int y){ 
     return new Foo(this.x+x,this.y+y); 
    } 
} 

现在,是有可能增加两个班是这样的:

Foo a=new Foo(2,3),b=new Foo(3,4); 
Foo c=a+b; 
System.out.println(c.x+" "+c.y); 

而得到这样的输出:

5 7 

如果是的话,我还有什么要做,如果没有,为什么?

+1

'Foo C = a.append( bx,by)' – msrd0 2014-10-18 08:55:47

+0

我知道我可以使用它,这就是为什么我已经包含了该命令,但我想用+运算符执行相同的功能 – 2014-10-18 08:56:56

+0

我相信C++有这个功能,为什么不在java中? – 2014-10-18 09:01:06

回答

2

没有Java不允许操作员超载simply because it doesn't need it

2.2.7 No More Operator Overloading 没有办法提供哪种程序员可以重载标准算术运算符。再一次,通过声明一个类,适当的实例变量以及操纵这些变量的适当方法,操作符重载的效果可以轻松实现。消除运算符重载导致代码的极大简化。

+2

“它不需要它”[引用需要] – 2014-10-18 08:57:42

+2

_'“只是因为它不需要它”'_ - 这是非常基于观点的,我喜欢C++的功能 – msrd0 2014-10-18 08:57:55

+0

嗯,我认为这将是很好的一些类可以使运营商负担过重。即使对于某些内置类也是如此,例如字符串的'*'运算符。但是,我承认这不是真的必要,太多的操作员使代码无法读取(就像我喜欢的Scala一样)。 – Dici 2014-10-18 08:59:53

2

'多年以来,来自Java团队的部分线路是“运营商超载太复杂了。”这个以及很多其他决定,如果有人显然没有做他们的功课,为什么我有一个鄙视Gosling和Java团队的许多选择的声誉 - 布鲁斯Eckel The Positive Legacy of C++ and Java

+0

这可以使用更多的上下文,而不仅仅是一个不直接回答问题的拉出式报价。但这是一个很好的小发现。 +1。 – 2014-10-21 20:46:48

相关问题