Как скрыть public метод в API?

Рейтинг: 1Ответов: 2Опубликовано: 16.04.2015

У меня в проекте Java два класса Class1{} и Class2{}. В Class2 есть метод private double pythagoras(). Я его обозначил как private, чтобы он не светился в API. В то же время я хочу его использовать и в другом классе Class1. Если я его обозначу всё же как public, есть ли способы (какие-то тэги, например) чтобы не показывать его в API? Или какие-то другие способы, оставив private, воспользоваться им в другом классе?

Ответы

▲ 6
  1. Если сделаете private то он будет невидим везде, кроме самого класса, даже его потомки не будут иметь к нему доступа
  2. Если сделаете protected то к нему будут иметь доступ все потомки + классы в одном пакете с ним
  3. Если сделаете public то к нему будут иметь доступ все
  4. Если оставите без модификатора, то к нему будут иметь доступ из классов в том же самом пакете

В вашем случае я бы рекомендовал №4

▲ 3

Вариант для мсье, знающих толк.

Посредством вызова Thread.currentThread().getStackTrace() получаем стек вызовов для данного метода в виде массива из StackTraceElement. Анализируем массив, проверяя, что текущий метод был вызван из класса, относящегося к вашей библиотеке. Если нет - выкидываем какое-нибудь исключение. Чтобы не добавлять вручную эту проверку в каждый метод, который можно вызывать отлько из API, пользуемся любым AOP-фреймворком (AspectJ, Spring AOP, самописный велосипед) для того, чтобы неявно воткнуть проверки на права доступа к методу.