Pregunta

se me pregunta por uno de colega sobre la clase Throwable en la API de Java.

Como por norma, entiendo, cada palabra que termina * poder es una interfaz API de Java. Hay un estándar de la industria sobre el uso de palabras tales como nombres de interfaz. Por lo tanto, sin saberlo, le dije acerca de esto como interfaz base para todos los tipos de excepción y de error en el mundo Java. Entonces me muestra el archivo java para esta clase.

Mis preguntas:

  1. ¿Por qué la gente Java ha elegido este nombre para ser una clase. Creo que esto debería haber sido una interfaz por defecto?

  2. ¿Es este un patrón de uso * palabras capaces como interfaz?

  3. ¿Hay algún otro ejemplo de la clase termina con * poder?

Saludos.

¿Fue útil?

Solución

Es muy común que los nombres '' -able ser interfaces en Java, pero no existe una convención de nomenclatura oficial para la interfaz que he encontrado que sugiere que los nombres de '' debe ser -able nombres de interfaz, aunque por lo general que es el caso.

convenciones de nombres de Java oficial se puede encontrar aquí - es bastante magra, realmente no hay ninguna restricción para la clase o interfaz de nomenclatura:

En cuanto a su pregunta Throwable, James Gosling, una vez contestada por eso que es una clase en lugar de una interfaz, a pesar de que el nombre fue más apropiado para una interfaz.

Por desgracia, el artículo original desde el sitio de Sun / Oracle ha desvanecido en el éter de Internet, lo que sólo puede proporcionar la atribución indirecta:

editar: Desde continúo para obtener upvotes a esta pregunta, he encontrado el enlace a la discusión de Sun a través de la Wayback Machine , aquí: http://web.archive.org/web/20071013225816/http://java.sun.com/features/2002/03/gosling.html?source=jdc_news&date=20020430

  

JDC: ¿Por qué no Throwable una interfaz? El nombre de clase de sugiere que debería haber sido. Ser capaz de atrapar a los tipos, es decir, algo así como try {} catch (), en lugar de sólo las clases. Eso haría que el lenguaje de programación Java mucho más flexible.

     

JG: La razón por la que el Throwable y el resto de los chicos no son interfaces se debe a que hemos decidido, o yo decidimos bastante pronto. decidí que quería tener un estado asociado con cada excepción de que se tira. Y no se puede hacer eso con las interfaces; sólo se puede hacer eso con las clases. El estado que está allí es básicamente estándar. Hay un mensaje, hay una instantánea, cosas por el estilo que siempre está ahí. y también, si usted presenta una interfaz de Throwable la tentación es ceder, para que cualquier objeto viejo ser una cosa Throwable. Se siente estilísticamente que lanzar objetos generales es probablemente una mala idea, que las cosas que quieren tirar realmente deberían ser las cosas que están destinados a ser excepciones que realmente capturan la naturaleza de la excepción y lo que pasó. No son sólo las estructuras de datos en general.

Otros consejos

Los nombres siempre se utilizan para las clases de nombres, pero Throwable es una excepción.

(Véase lo que hice allí?)

Hay otros, como

Y por supuesto hay un montón de interfaces que no terminan en - poder . Algunas personas, como para aparecer delante todos sus nombres de interfaz con una 'I' ( IAdjustable en lugar de ajustable ). Al igual que el formato de código de guerras, su no es un acuerdo universal. Sun tiene algunas sugerencias pero son bastante vagos.

  1. Los nombres de interfaces debe ser siempre un adjetivo y, si es posible debe terminar en "poder" ha sido la tendencia en las convenciones de nomenclatura dentro de la comunidad de Java. Eso no tiene que seguir estrictamente, es sólo una convención de nombres, no hay nada que le impida nombrar a la interfaz / clase lo que quiera.

  2. Sí, consulte http: // www. iwombat.com/standards/JavaStyleGuide.html#Class%20and%20Interface%20Names

  3. clonable

* Nota: Los nombres de interfaces deberán ser en general adjetivos, mientras que los nombres de clase deberán ser en general los sustantivos.

Salida página 15 de este documento guía de estilo lanzado por Sun. http://java.sun.com/docs/codeconv/CodeConventions.pdf

También hay cierto debate sobre si se trata de un estilo bueno añadir la letra I a interfaces. . (Ejemplo: ICAT, idog, etc.), pero que por lo general se aplica a otros idiomas y no a Java por la opinión

En mi opinión personal, una convención es sólo una "regla de oro", si la convención se interpone en el camino de la legibilidad del código, ir con una interfaz nombre más descriptivo / clase en lugar de la que sigue la convención, pero si su realmente luchando para llegar a un buen nombre de la clase descriptiva, tal vez usted necesita pensar acerca de la funcionalidad de su clase / interfaz de nuevo un poco más.

Estamos hablando de convenciones de nombres aquí y sí, capaces * es la convención preferida para asignar nombres a interfaces. Como estoy seguro que has visto, siempre hay excepciones. Por ejemplo, System.arraycopy no es camello entubado.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top