0

ここにいます:http://developer.android.com/reference/java/io/PrintStream.html#print%28float%29

たった 1 つの関数ですべての目的を果たすことができます。

public void print (Object o) {
    if (o == null) {
        // print "null"
    } else {
        // print o.toString();
    }
}

さらに詳しく。たとえばinternal_print(String str)、印刷ストリームに書き込む関数です。その場合、必要な関数は次の 1 つだけです。

public void print (Object o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

、、、などの他のオーバーロードについてfloatは、次のようになると想像できます。intcharlong

public void print (float o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

public void print (int o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

public void print (char o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

public void print (long o) {
    if (o == null) {
        internal_print( "null" );
    } else {
        internal_print( o.toString() );
    }
}

...

または、キラー関数を呼び出すだけでもprint (Object o)

説明してください。どうもありがとう!!

4

1 に答える 1

5

歴史的な理由: このPrintStreamクラスは Java 1.0 から存在し、オートボクシングが (1.5 で) 追加されるずっと前から存在します。

オートボクシングは、プリミット型を に渡すことを可能にするものですprint(Object o)。それがなければPrintStream、プリミティブ型ごとに個別にオーバーロードを実装する必要がありました。

ちなみに、print(..)プリミティブ型の実装は次のようになります。

public void print (int o) {
    print(String.valueOf(o));
}

...そして、 や などのラッパー クラスのメソッドへの基本String.valueOf(..)的なデリゲートの実装。ソースコードはdocjarで読むことができます。Integer.toString(int)Long.toString(long)

于 2013-04-02T22:19:57.527 に答える