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

自分のオブジェクトでこれを行うにはどうすればよいですか (デフォルト値を double にしたい場合)。

再度、感謝します。

最終編集 (願わくば): あなたの回答は、私がプリミティブ ラッパーと Autounboxing についてさらに学ぶのに十分でした。私の理解では、私が望むことを行う方法はありません (この時点で、オブジェクトを double として自動アンボックス化すると説明します)、または少なくとも別の質問のためにそれを保存します。乾杯。

4

4 に答える 4

7

はい、できます: オーバーライドするだけですtoString:

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

これが機能するのは、印刷中のオブジェクトをprintln呼び出すためです。toString

于 2013-01-20T20:51:41.587 に答える
3

MyObject クラスでオーバーライドtoString()methodします。

private int value ;
public String toString() {
  return Integer.toString(this.value);
 }
于 2013-01-20T20:53:10.867 に答える
1

Java は常に「内部」ステートメントを最初に実行します。Double があるとします。

Double db = new Double(20.1);

次に、これを行いたい:

System.out.println(db + 10)

次に、コンパイラは最初db + 10にこの部分を実行します。これは、自動ボクシング/アンボクシングdb.doubleValue() + 10で評価されて になり30.1ます。次に、外側の関数 ( System.out.println(x)) が で評価されx=30ます。

次のコードがある場合System.out.println(db + "hi")、コンパイラはdb文字列に何か () を追加していることを認識し、 on を"hi"呼び出します。そして、それ (文字列) を "hi" に追加すると、最終的な文字列が得られます。.toString()db"20.1hi"

舞台裏で何が起こっているのかを理解するのに役立つことを願っています.

于 2013-01-20T22:12:09.630 に答える
0

インスタンス メソッドが新しいインスタンスを返すようにするだけです。

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

(ああ、それは 、ではありintませんInt

そして .toString() を実装します:

@Override
public String toString()
{
    return Integer.toString(value);
}
于 2013-01-20T20:52:15.903 に答える