Question

Je demande par un collègue sur la classe Throwable dans l'API java.

En application de la norme, je ne comprends, chaque mot de fin * pouvoir est une interface API java. Il existe une norme de l'industrie sur l'utilisation de mots tels que les noms d'interface. Alors, je sans le savoir, lui ai parlé de ce que l'interface de base pour tous les types d'erreur et d'exception dans le monde java. Puis il me montre le fichier java pour cette classe.

Mes questions:

  1. Pourquoi les gens java a choisi ce nom pour une classe. Je pense que cela aurait dû être une interface par défaut?

  2. Est-ce un modèle à utiliser * mots capables comme interface?

  3. est-il un autre exemple de classe se terminant par * pouvoir?

Cordialement.

Était-ce utile?

La solution

Il est très fréquent pour les noms « -ables » être des interfaces en Java, mais il n'y a pas de convention officielle pour la désignation de l'interface que j'ai trouvé qui suggère que les noms « -ables » doivent être des noms d'interface, mais en général qui est le cas.

conventions de nommage Java officiel se trouve ici - il est assez maigre, il n'y a vraiment pas de restrictions pour la dénomination de la classe ou de l'interface:

En ce qui concerne votre question Throwable, James Gosling a répondu une fois pourquoi il est une classe plutôt que d'une interface, même si le nom a été plus approprié pour une interface.

Malheureusement, l'article original sur le site de Sun / Oracle a disparu dans l'éther internet, donc je ne peux fournir l'attribution indirecte:

edit: Depuis que je continue à se upvotes à cette question, je l'ai trouvé le lien vers la discussion Sun via le Wayback machine , ici: http://web.archive.org/web/20071013225816/http://java.sun.com/features/2002/03/gosling.html?source=jdc_news&date=20020430

  

JDC: Pourquoi est-Throwable pas une interface? Le nom l'indique genre de celui-ci aurait dû être. Être en mesure de prendre pour les types, qui est, quelque chose comme try {} catch (), au lieu des classes seulement. Cela rendrait le langage de programmation Java beaucoup plus flexible.

     

JG: La raison pour laquelle le Throwable et le reste de ces gars-là ne sont pas des interfaces est parce que nous avons décidé, ou je décidé assez tôt. J'ai décidé que je voulais avoir un état associé à toute exception qui est jeté. Et vous ne pouvez pas le faire avec des interfaces; vous ne pouvez le faire avec des classes. L'Etat qui est là est fondamentalement standard. Il y a un message, il y a un instantané, des trucs comme ça qui est toujours là. et aussi, si vous faites une Throwable l'interface la tentation est d'attribuer, de faire un objet quelconque soit une chose Throwable. Il se sent stylistiquement que de lancer des objets généraux est probablement une mauvaise idée, que les choses que vous voulez jeter devrait vraiment être des choses qui sont destinées à des exceptions qui capturent vraiment la nature de l'exception et ce qui se passait. Ils ne sont pas seulement des structures de données générales.

Autres conseils

Les substantifs sont toujours utilisés pour les classes de nom, mais Throwable est une exception.

(Voir ce que je faisais là-bas?)

Il existe d'autres comme

Et bien sûr, il y a beaucoup d'interfaces qui ne se terminent pas - peut . Certaines personnes aiment à PREFIX tous leurs noms d'interface avec un 'I' ( IAdjustable au lieu de réglable ). Comme les guerres mise en forme de code, leur est pas à un accord universel. Sun a quelques suggestions mais ils sont assez vagues.

  1. Les noms d'interface doit toujours être un adjectif et, si possible, doit se terminer par « mesure » a été la tendance dans les conventions de nommage au sein de la communauté Java. Cela ne doit pas être suivi strictement, sa juste une convention de nommage, il n'y a rien pour vous empêcher de nommer l'interface / classe tout ce que vous voulez.

  2. Oui, voir http: // www. iwombat.com/standards/JavaStyleGuide.html#Class%20and%20Interface%20Names

  3. CLONABLE

* Remarque, les noms d'interface doit généralement être adjectifs, alors que les noms de classe doivent généralement des noms.

Consultez la page 15 de ce document guide de style publié par Sun. http://java.sun.com/docs/codeconv/CodeConventions.pdf

Il y a aussi un débat quant à savoir s'il est un bon style à ajouter la lettre I aux interfaces. . (Exemple: ICat, idog, etc.), mais qui s'applique généralement à d'autres langues et non à Java par exemple

A mon avis une convention est juste une « règle générale », si la convention est dans la manière de la lisibilité de votre code, aller avec une interface plus descriptive / nom de classe au lieu de celle qui suit la convention, mais si votre vraiment du mal à trouver un bon descriptif nom de classe, peut-être vous devez penser à la fonctionnalité de votre classe / interface de nouveau un peu plus.

On parle de conventions de nommage ici et oui, * est en mesure de la convention préférée pour nommer des interfaces. Comme je suis sûr que vous avez vu, il y a toujours des exceptions. Par exemple, System.arraycopy ne chameau Cased.

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