2013-08-16 3 views
1

J'ai un jar dépendance, Pour la construction A, dependency.jar contiendra les classes A, B, C, D. Pour construire B, dependency.jar ne contiendra que les classes A, B, CClasse disponibilité Vérifier

Problème:

Source: mon code fait usage de toutes les classes A, B, C, D.

Objectif: Le code que je l'ai écrit devrait rester la même pour construire A et B.

Problème: Mais évidemment classe D ne sera pas disponible dans Build B. Donc, mon code doit gérer la disponibilité de classe D. Dans le même temps le code supplémentaire, je vais ajouter pour gérer la disponibilité de la classe D, ne devrait pas ralentir mon code.

Veuillez suggérer des solutions possibles.

Une solution: Nous utiliserons l'API Class.forName() pour vérifier la disponibilité de la classe.

Problème avec la solution: API jeter ClassDefNotFound chaque fois que s'il est pas disponible, et selon ma compréhension Class.forName va essayer de charger la classe donc, sera lente.

NOTE: classe D est facultative, si elle n'est pas disponible, la fonctionnalité liée à cette classe doit être désactivée

+0

Comment votre code va-t-il fonctionner s'il utilise une classe D, qui n'est pas disponible? –

+0

Quel est l'usage de la classe D alors ?? –

+0

la classe D est facultative, si la classe D n'est pas là, cette fonctionnalité sera désactivée – Gerrard

Répondre

1

Vous pouvez utiliser la méthode getResource() sur un objet de classe ou d'un chargeur de classe d'une classe. Si elle est nulle retour alors la classe est présente pas comme ci-dessous

URL url=SomeClass.class.getClassLoader().getResource("className.class"); 
if(url==null)//class not present 
0

Vous devez charger dynamiquement votre classe D utilisant la réflexion puis appeler ses méthodes, de la même façon que vous le faites pour les pilotes de base de données. Vous ne pouvez pas faire de références directes à votre classe dans votre code sinon votre code ne compilera pas et se plaindra de l'indisponibilité de la classe. Si votre classe peut être chargée à l'exécution, activez les fonctions requises pour les désactiver.

Questions connexes