Где API для библиотеки, объявленной в Java? - PullRequest
0 голосов
/ 07 мая 2019

В C / C ++ API для библиотеки объявляется в заголовочных файлах. Я могу заглянуть в заголовочные файлы, чтобы узнать, какие функции и типы предоставляет библиотека. Но Java не использует концепцию заголовочных файлов. Что он использует вместо этого? Где я могу увидеть объявление интерфейса для библиотеки Java?

Ответы [ 3 ]

1 голос
/ 07 мая 2019

В java вы можете использовать все public классы, определенные в файле jar.

Внутри класса вы можете вызывать все открытые методы.

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

Здесь приведена полная таблица видимости (скопирована из этого другого ответа ):

            │ Class │ Package │ Subclass │ Subclass │ World
            │       │         │(same pkg)│(diff pkg)│ 
────────────┼───────┼─────────┼──────────┼──────────┼────────
public      │   +   │    +    │    +     │     +    │   +     
────────────┼───────┼─────────┼──────────┼──────────┼────────
protected   │   +   │    +    │    +     │     +    │   -         
────────────┼───────┼─────────┼──────────┼──────────┼────────
<default>   │   +   │    +    │    +     │     -    │   - 
────────────┼───────┼─────────┼──────────┼──────────┼────────
private     │   +   │    -    │    -     │     -    │   - 

 + : accessible         - : not accessible

Где это определения столбцов:

  • Класс - тот же класс (это не ваш случай, потому что вы используете классы, определенные внешней библиотекой)
  • Пакет - Любой класс, определенный в том же пакете класса, к которому вам нужен доступ
  • Подкласс (тот же пакет) - Любой класс, который является подклассом класса, к которому вам нужен доступ и который определен в том же пакете
  • Подкласс (другой пакет) - Любой класс, который является подклассом класса, к которому вам нужен доступ и который определен в другом пакете
  • World - Любой другой классss (не тот же пакет и не подкласс)
1 голос
/ 07 мая 2019

Одним из способов является то, что по соглашению разработчики Java публикуют Javadoc со своими API. Иногда в одном и том же файле jar, но обычно в отдельном файле с похожим именем, загруженным из того же места.

Если у вас нет Javadoc, вы можете найти общедоступный интерфейс библиотеки через Reflection: подумайте о C ++ RTTI на стероидах, причем каждое публичное имя класса, каждое публичное имя метода и его сигнатуры, включая имена его аргументов , являются видимыми и могут быть получены программно во время выполнения, а также во время разработки. IDE - хороший инструмент, чтобы помочь вам с этим; он использует отражение, чтобы сообщить вам о доступных классах, и показывает подпись метода, как только вы открываете скобки после его имени.

1 голос
/ 07 мая 2019

Проще говоря: вы не можете.

Не существует универсального правила, которое применяется к Java , как именно делать именно это. Конечно, вы можете проверить наличие interface классов Java, а также поиск открытых классов и их открытых методов. Но не существует «центрального» места, где такая информация должна объединяться.

Тем не менее, в недавней Java вы определяли понятные модули и писали хорошие комментарии Javadoc для описания ваших пакетов и того, как их использовать.

Другими словами: существуют определенные концепции, которые помогают разработчикам Java описать: «Это интерфейс для внешнего потребления, а здесь информация о том, как использовать этот интерфейс». Но как вы это сделаете, это ваш выбор.

С этой точки зрения он очень похож на C ++. Это не поможет вам разделить заголовочные файлы и исходные файлы cpp ... когда содержимое внутри заголовочных файлов не записано разумными способами.

Наконец: реальный ответ, вероятно, таков: вы полагаетесь на свою IDE. Когда я хочу найти использование или реализацию интерфейса, я спрашиваю мою IDE, которая знает мой проект и может показать мне такие вещи.

...