2013-01-20 14 views
3

舉個例子,我想模仿String對象的功能:如果沒有方法被調用,我可以讓對象返回一個默認值嗎?

String mystring = new String ("Hi there."); 
System.out.println(mystring); // prints "Hi there." without calling any methods on String 
           // (that is what I want with my object) 
System.out.println(mystring.toUpperCase()); // prints "HI THERE." 

與此開始:

class MyObject 
{ 
    private Int value ; 

    public MyObject (Int value) 
    { 
     this.value = value ; 
    } 
    public Int getValue () 
    { 
     return this.value ; 
    } 
    public Int multiplyBy (Int multiplier) 
    { 
     return this.value * multiplier ; 
    } 
} 

...如何(或者我可以)做這樣的事情:

MyObject myobject = new MyObject (6) ; 
System.out.println(myobject) ; // want to print myobject.value (6) 
System.out.println(myobject.multiplyBy (2)) ; // print 12 

我對Java很陌生,意識到我可能錯過了一些基本概念,但任何反饋將不勝感激。謝謝。

編輯: 有關覆蓋toString方法的反應是有益的,但它並不完全在做什麼,我腦子裏想的,這裏有我想要的一個更好的例子:

Double mydouble = new Double (20.1) ; 
System.out.println (mydouble + 10.1) ; // prints 30.2 

我將如何做到這一點與我自己的對象(假設我希望默認值是雙精度)?

再次感謝。

最終編輯(希望): 您的答案足以讓我學習更多關於原始包裝和Autounboxing。我的理解是,沒有辦法做我想做的事情(在這一點上,我會描述爲autounboxing我的對象作爲一個雙),或者至少我會保存它的另一個問題。乾杯。

+0

即使您不知道它已經存在,也會始終調用方法。 ;) –

+0

我想我的問題是,當我打印mydouble + 10.1,允許它評估爲30.2(如果我在我的對象上使用toString它說「操作符+不能應用於MyObject,角度)mydouble上調用什麼方法」 – Synexis

+0

你不能用Java來改變運算符 –

回答

7

是的,你可以做到這一點:所有你需要做的是覆蓋toString

public String toString() { 
    return ""+this.value; 
} 

這工作,因爲被打印println電話toString的對象。

+0

這是一個令人難以置信的快速和簡單的答案。謝謝。 – Synexis

+0

+1現在.......... :) – PermGenError

+0

其實我遇到了一個問題,我在做什麼:我可以讓它返回一個不同類型的類似於:Double mydouble = new Double(20.0) ; System.out.println(mydouble + 10.2); // print 30.2 – Synexis

0

只是讓這個實例方法返回一個新的實例:

public MyObject multiplyBy(int multipler) 
{ 
    return new MyObject(value * multipler); 
} 

(哦,這將是int,不Int

和實施的ToString():

@Override 
public String toString() 
{ 
    return Integer.toString(value); 
} 
3

覆蓋toString()method在您的MyObject類

private int value ; 
public String toString() { 
    return Integer.toString(this.value); 
} 
1

Java將始終首先執行「內部」語句。所以說,我們有一個雙:

Double db = new Double(20.1);

那麼你一定要做到這一點:

System.out.println(db + 10)

編譯器會做這部分首先db + 10與自動裝箱/拆箱成爲​​這評估爲30.1。然後用x=30評估外部函數(System.out.println(x))。

當你有下面的代碼System.out.println(db + "hi")編譯器看到您要添加的東西(db)爲字符串"hi",因此呼籲db.toString()。然後將該字符串添加到「hi」中,這會給出最後一個字符串:"20.1hi"

希望能幫助您瞭解幕後操作。

相關問題