2009-12-24 13 views
9

Cuando quiero crear una clase Java está generando automáticamente un archivo con el mismo nombre de clase.¿Por qué no puedo darle un nombre diferente a la clase que el nombre del archivo?

Pero cuando genera una clase, puede cambiar el nombre del archivo diferente al nombre de la clase ... ¿Me falta algo?

alt text http://content.screencast.com/users/uzay95/folders/Jing/media/9533b1df-6194-4660-aada-2f7c4e0df6c0/2009-12-24_1603.png

alt text

+0

@ uzay95: Sé lo que es. Me siento igual todo el tiempo y siempre obtengo las mismas respuestas. –

+2

+1 para obtener gráficos increíbles en la pregunta. ¿Cómo creaste esto? –

+0

que utilizan Jing para capturar y sacar estas líneas rojas :) – uzay95

Respuesta

4

La especificación del lenguaje en sí no dicta esto (he echado un vistazo, y no puedo encontrar ninguna referencia), pero en general se aplica por las herramientas. Facilita considerablemente la gestión de dependencias de las herramientas, ya que sabe dónde buscar la clase B si la clase A tiene una referencia a ella. La convención se extiende a la estructura del directorio haciendo eco de la estructura del paquete, pero de nuevo, esto es solo una convención.

+0

+1 - Definitivamente es una convención, no una restricción de idioma. –

+3

Sigue siendo una convención impuesta por casi todos los compiladores y herramientas. Lo que efectivamente lo convierte en una restricción de idioma, incluso si no está dictado por el JLS. – Joey

+2

Consulte la respuesta de Pascal Thivent a continuación; there ** is ** referencia a esto en el JLS. – delfuego

9

Debido a que los diseñadores del lenguaje decirlo. Es realmente así de simple. Es una convención y te obligan a seguirlo.

+3

Esto simplifica la carga de clases. –

+0

Cuando Java crea una clase (como en la figura 2), lo nombra de manera diferente. Me refiero a que el nombre de clase y el nombre de archivo que contiene esa clase son diferentes. Mire atentamente la figura 2. Verá en el lado derecho que el nombre del archivo es 'Book_1.java' mientras que el nombre de la clase es 'Book'. ¿Ves mi punto? – uzay95

+0

@ uzay95, Java no crea la clase. Su herramienta/IDE lo hace. No sé cuál es la herramienta, pero parece un error. Eso o estás tratando de crear también clases de libros en el mismo paquete. – Glen

1

Si puedo cambiar el mundo, deseo que los diseñadores de C# también lo hagan. Cuánto tiempo se puede ahorrar forzando a los muchachos a no crear file classes.cs y poner TODO el código en él. ¿No es tal como el requisito de llaves para If? ¿Por qué yo vigor idioma que disparate:

if (true) 
{ 

} 

en lugar de

if true 
{ 

} 

:-)

+0

Pero a veces estas reglas lo hacen más legible. – uzay95

+0

¿Más legible? ¿para quien? Cuando abro el proyecto, podré encontrar fácilmente el archivo por nombre de clase y encontrar la clase por nombre de archivo, y si las herramientas obligan a las personas a seguir estas reglas, yo voto por ello. –

7

Citando la sección 7.6 Top Level Type Declarations del Java Language Specification:

Cuando se almacenan los paquetes en un archivo sistema (§7.2.1), el sistema host puede elegir para hacer cumplir la restricción que es un error de tiempo de compilación si un tipo no se encuentra en un archivo con un nombre compuesto por el nombre del tipo más un extensión (tales como .java o .jav) si cualquiera de lo siguiente es cierto:

  • el tipo se conoce por el código en otras unidades de compilación del paquete en la que se declara el tipo.
  • El tipo está declarado public (y por lo tanto es potencialmente accesible del código en otros paquetes).

Esta restricción implica que no debe ser como máximo de un tal tipo por unidad de compilación.Esta restricción hace que sea más fácil para un compilador del lenguaje de programación Java o una implementación de la máquina Java virtual encontrar una clase con nombre dentro de un paquete ; Por ejemplo, el código fuente para un tipo de público wet.sprocket.Toad se encontraría en un archivo Toad.java en el directorio wet/sprocket y el código objeto correspondiente se encuentra en el archivo Toad.class en el mismo directorio .

Cuando los paquetes se almacenan en una base de datos (§7.2.2), el sistema host debe no imponer tales restricciones. En la práctica , muchos programadores eligen poner cada clase o tipo de interfaz en su propia unidad de compilación, ya sea no es público o se hace referencia al código en otras unidades de compilación.

+0

Gracias por ser la única persona en este hilo que encontró la parte correspondiente de la especificación del lenguaje y lo citó, en lugar de salir de su posterior hablar. :) – delfuego

+0

Independientemente, el JLS dice "puede optar por hacer cumplir *, por lo que es todavía una convención, en lugar de una regla fija. – skaffman

Cuestiones relacionadas