2014-10-18 132 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

相關問題