Почему Java PrintStream должен перегружать свои функции print()?

Вот вы здесь: http://developer.android.com/reference/java/io/PrintStream.html

Всего одна функция может служить всем целям:

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

Больше разработок. Например, internal_print(String str) это функция, которая пишет в поток печати. Тогда единственной необходимой функцией будет:

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

Для других float, int, char, longи т. д. перегрузок, я могу представить, что они такие же, как:

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),

Не могли бы вы объяснить. Большое спасибо!!

1 ответ

Решение

Исторические причины: PrintStream класс существует с Java 1.0 задолго до того, как был добавлен автобокс (в 1.5).

Автобокс - это то, что позволит вам передать тип примитива print(Object o), Без этого PrintStream пришлось реализовать перегрузку для каждого примитивного типа отдельно.

Кстати, реализации print(..) для примитивных типов это больше похоже на:

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

... и реализация String.valueOf(..) в основном делегирует методы в классах-оболочках, таких как Integer.toString(int) а также Long.toString(long), Вы можете прочитать исходный код на docjar.

Другие вопросы по тегам