Pourquoi les méthodes OSGI BundleActivator sont déclarées avec « throws Exception »?

StackOverflow https://stackoverflow.com/questions/9311890

  •  26-10-2019
  •  | 
  •  

Question

Les deux méthodes de start et stop de OSGI BundleActivator sont déclarées par throws Exception. En même temps, dans son livre Effective Java, deuxième édition, article 62, Joshua Bloch dit

ne déclarer une méthode "throws Exception"

Alors est-ce une décision de mauvaise conception dans BundleActivator ou telle généralité est justifiée dans ce cas, et pourquoi?

Était-ce utile?

La solution

S'il vous plaît noter que vous pouvez déclarer votre start et les méthodes de stop sans aucune clause de throws. (Vous pouvez également déclarer ces méthodes avec des sous-classes de java.lang.Exception.)

D'autre part, un particulier, par exemple

void start(BundleContext context) throws BundleActivatorException
méthode

ne changerait pas trop. Il serait tout simplement fait attraper leurs implémenteurs à des exceptions et réémettre enveloppé dans un BundleActivatorException. Étant donné que chaque exception rend inutile d'activation bundle ce bloc try-catch est vraiment inutile, il est donc plus facile de jeter java.lang.Exception.

Autres conseils

Lancer une exception à partir d'une méthode start() ou stop() indique que quelque chose ne va pas, et le changement du cycle de vie ensemble ne doit pas passer. Puisque nous séparons les préoccupations de détection de la situation (par le faisceau), et la manipulation (par le cadre), jetant Exception est la seule chose raisonnable à faire.

Je considère le anachronique de conseils de Josh Bloch. Il n'y a rien de mal avec de throws Exception. Il vous donne la possibilité de jeter tout exception que vous aimez, et le cadre OSGi va la traiter.

Notez que vous ne devez jamais invoquer ces méthodes vous.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top