Внешняя библиотека для которой у меня нет реализации - PullRequest
0 голосов
/ 25 ноября 2018

Мне нужно написать кусок кода, который проверяет строку, возвращающуюся после вызова метода.Проблема в том, что у меня нет никакой информации или реализации об этом методе, кроме его интерфейса, как показано ниже:

package com.company.name.library;

public interface FooService {
    String getBar(String fooBar) throws NotKnownBarException, NotKnownFooException;
}

В совершенно отдельном пакете я хочу написать некоторый код, который использует этот метод.(По сути, мне нужен этот код для компиляции, не обязательно запускать)

Поскольку у меня нет реализации, я не могу создать экземпляр объекта, для которого вызывается вызов метода.Можно ли вообще сделать этот компилятор с такой ограниченной информацией?Или нужно что-то сделать так, чтобы я мог скомпилировать код и во время выполнения выполнить какое-то внедрение, чтобы можно было сделать правильный вызов метода, когда будет доступна реализация.

1 Ответ

0 голосов
/ 25 ноября 2018

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

То, что вам не нужно зависеть от конкретной реализации, обычно хорошо дляРазвязка точки зрения.Вам нужен один для запуска вашего кода и, конечно, его модульного тестирования.Для этого вам может потребоваться создать собственную импровизированную реализацию.

Псевдо-Java-код, как показано ниже (Отказ от ответственности: Java не является моим основным языком)

package com.company.name.yourpackage

class UsesFoo {
   // constructor
   UsesFoo(FooService giveMeAnImplementationPlease)
   {
   }

   String DoSomethingWithFoo()
   {
       return anImplementationIWasGiven.getBar()   
   }

   // state
   FooService anImplementationIWasGiven;
}

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

Если использование не понятно, тогда вы должны пожаловаться любомупредоставил библиотеку без достаточной документации.Если по какой-то причине это невозможно, вы также можете рассмотреть возможность добавления к нему сами, чтобы другие не страдали.

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