Почему 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.