Mon approche habituelle est à ce:
séparé le code qui utilise la bibliothèque en option dans un répertoire autre source. Il devrait implémenter des interfaces et dépend généralement du répertoire source principal. Pour appliquer des dépendances dans la construction, compilez le répertoire source principal sans la bibliothèque facultative, puis la source qui dépend de la bibliothèque facultative (avec un autre fichier de classe provenant d'un autre répertoire source et la bibliothèque sur le chemin de classe du compilateur) .
La principale source devrait tenter de charger une seule classe racine dans le répertoire source en option dynamiquement (Class.forName
, asSubclass
, getConstructor
, newInstance
). L'initialisateur statique de la classe racine doit vérifier que la bibliothèque est réellement disponible et lancer une exception si ce n'est pas le cas. Si la classe racine ne se charge pas, suivez éventuellement le modèle Null Object.
Qu'est-ce que signifie 'disponible'? Les chargez-vous par réflexion? –
J'écris une bibliothèque pour Android. Depuis Android 1.5 il y a une classe appelée AsyncTask que je voudrais utiliser si elle est disponible, sinon je voudrais pouvoir utiliser une classe non native qui fait la même chose. Je préférerais le natif puisque cela sera (probablement) maintenu. –