Безопасен ли API экспорта OSGi, содержащий ссылку на код реализации? - PullRequest
0 голосов
/ 28 мая 2011

Давайте представим, что я реализую следующее:

public enum ExportAPIForOSGi {
    ;
    public static SpecialObject newSpecialObject() {
        return new SpecialObjectImplv1();
    }
}

public abstract class SpecialObject {
    public abstract String specialMethod(String s);
}

public class SpecialObjectImplv1 extends SpecialObject {
    @Override
    public String specialMethod(String s) {
        return "33" + s;
    }
}

Каждый класс объявлен в своем отдельном файле.Только ExportAPIForOSGi и SpecialObject должны быть экспортированы в OSGi.

Мой вопрос: безопасно ли экспортировать ExportAPIForOSGi, поскольку он содержит явную ссылку на код реализации (т. Е. SpecialObjectImplv1)?Будет ли представлен код реализации?

Давайте представим, что позже я использую SpecialObjectImplv2 в ExportAPIForOSGi вместо v1?Это будет проблемой?

1 Ответ

3 голосов
/ 28 мая 2011

Вам необходимо экспортировать пакет (ы), содержащие ExportAPIForOSGi и SpecialObject, поскольку они являются вашим общедоступным API.SpecialObjectImplv1 должен находиться в другом пакете, который не экспортируется.После этого вы можете изменить реализацию newSpecialObject на использование другого класса impl, поскольку класс impl не виден в сигнатуре открытого API.

...