Почему метод java System.out.print имеет разные формы? - PullRequest
0 голосов
/ 03 августа 2020
public void print(long l) {
    write(String.valueOf(l));
}

/**
 * Prints a floating-point number.  The string produced by <code>{@link
 * java.lang.String#valueOf(float)}</code> is translated into bytes
 * according to the platform's default character encoding, and these bytes
 * are written in exactly the manner of the
 * <code>{@link #write(int)}</code> method.
 *
 * @param      f   The <code>float</code> to be printed
 * @see        java.lang.Float#toString(float)
 */
public void print(float f) {
    write(String.valueOf(f));
}

/**
 * Prints a double-precision floating-point number.  The string produced by
 * <code>{@link java.lang.String#valueOf(double)}</code> is translated into
 * bytes according to the platform's default character encoding, and these
 * bytes are written in exactly the manner of the <code>{@link
 * #write(int)}</code> method.
 *
 * @param      d   The <code>double</code> to be printed
 * @see        java.lang.Double#toString(double)
 */
public void print(double d) {
    write(String.valueOf(d));
}

/**
 * Prints an array of characters.  The characters are converted into bytes
 * according to the platform's default character encoding, and these bytes
 * are written in exactly the manner of the
 * <code>{@link #write(int)}</code> method.
 *
 * @param      s   The array of chars to be printed
 *
 * @throws  NullPointerException  If <code>s</code> is <code>null</code>
 */
public void print(char s[]) {
    write(s);
}

Изображение исходного кода

Я открыл файл класса java .io.PrintStream. И я обнаружил, что существуют различные методы печати. Каждый метод на 99% одинаков, без единого типа параметра. Многие руководства по программированию предлагают в этой ситуации использовать generi c (или шаблон). Так что мне интересно, почему java .io.Printstream не использует generi c.

1 Ответ

1 голос
/ 03 августа 2020

Если вы использовали метод с

public <T> void print(T value);

и хотели бы напечатать значение int, тогда if будет использоваться как

public void print(Integer value);

, поэтому int значение будет заключено в рамку, что означает потерю производительности и ненужное использование памяти.

Это причина того, что вы часто найдете перегрузки методов для всех примитивных типов данных

Также, как указал Таши, класс просто старше, чем обобщенные в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...