2009-06-29 3 views
2

Я занимаюсь разработкой библиотеки. Я хочу, чтобы некоторые функции были дополнительно доступны в случае, если какая-то другая библиотека находится в пути к классам. Мое понимание:Зависимости времени сборки Java и времени выполнения

  • было бы buildtime зависимость, так как я импортировать из этой библиотеки, и использовать его в местах
  • выполнения зависимость существует только тогда, когда путь кода достигнет точки, где я использую что-то из этого библиотека

Правильно ли я?

ответ

6

Правильно ли я?

Да.

выполнения зависимость возникает только тогда, когда путькод достигает ...

Я бы это назвал путь выполнения. В любое время код в исполнении достигнет некоторой

a.A a = new a.A();

А если класс a.A не на вашем пути к классам он будет бросать исключение Runntime. Это означает, что вы должны бежать и достигать этой точки, чтобы получить сообщение об ошибке. Если ваша программа не достигает этой точки, она никогда не сработает.

2

Возможно, вы уже это делаете, но в тех случаях, когда класс может быть или не быть на пути к классам во время выполнения, я бы рекомендовал использовать ClassLoader для явной загрузки класса, принимая соответствующие меры, если класс не найден (как это не похоже на условие ошибки в вашем случае). Это сделает код гораздо более читаемым, а не иметь что-то вроде:

try { 
    new MyClass(); // Could potentially thrown a ClassNotFoundException. 
    // ... yada yada 
} catch(ClassNotFoundException ex) { 
    // Do something else instead. 
} 

Другого подхода Вы могли бы хотеть рассмотреть оборачивают свои библиотечные вызовы в адаптере слое и обеспечивает реализацию No-Op адаптера в тех случаях, когда библиотека недоступна, что делает остальную часть вашего кода агностиком в том, присутствует ли библиотека или нет.

Смежные вопросы