Почему я вижу конструктор в исходном коде String, а не в JavaDocs? - PullRequest
3 голосов
/ 22 января 2012

Я пытаюсь ближе познакомиться с использованием JavaDocs. Я смотрел на функцию String и подумал, что было интересно, как String на самом деле представляет собой просто массив символов, содержащихся в закрытой ссылочной переменной.

Когда я смотрел на исходный код строки, он показывал один из конструкторов как следующий:

String(int offset, int count, char value[]) {
    this.value = value;
    this.offset = offset;
    this.count = count;
}

Затем я перехожу, чтобы посмотреть на String JavaDoc , и он не показывает конструктор с таким типом подписи ... что дает?

Ответы [ 5 ]

7 голосов
/ 22 января 2012

Как упоминал Оли в комментариях выше, конструктор не является общедоступным.По крайней мере, в OpenJDK, код показан с комментарием:

// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {

В качестве дополнительного примечания, если вы действительно хотели этот конструктор, есть тот, который практически такой же, но в другом порядке:

String(char[] value, int offset, int count)
3 голосов
/ 22 января 2012

Из источника:

644 // Закрытый конструктор пакета, который совместно использует массив значений для скорости.

Непубличные методы часто не являются частью javadoc, так какэто не то, на что вы можете положиться (или использовать в данном случае, поскольку вы не находитесь в java.lang и его пакет закрыт).

3 голосов
/ 22 января 2012

Прямо над этим конструктором в исходном коде есть комментарий:

// Package private constructor which shares value array for speed.
String(int offset, int count, char value[]) {
    this.value = value;
    this.offset = offset;
    this.count = count;
}

Это объясняет, почему документация этого закрытого конструктора не включена в общедоступную документацию.

3 голосов
/ 22 января 2012

Согласно некоторой случайной версии документации Java , для String нет открытого конструктора с подписью, которую вы опубликовали. Следовательно, это, похоже, внутренний (частный) конструктор, который вы не должны использовать напрямую, и поэтому он не задокументирован.

Стандартные библиотеки часто используют внутренние вспомогательные функции, которые объединяют множество похожих и связанных функций открытого интерфейса в небольшое количество реальных рабочих функций.

2 голосов
/ 22 января 2012
// Package private constructor which shares value array for speed.
String(int offset, int count, char value[])

так что мы не можем создать объект вне класса, таким образом он может обеспечить безопасность класса String. Этот конструктор реализован в синглетонах.

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