2010-01-15 20 views
15

Sé que el paquete java.lang es auto importado por cada programa Java que escribimos, por lo tanto, todas las clases están disponibles automáticamente para nosotros.por qué autoimport solo el paquete java.lang?

Mi pregunta es por qué no auto importar java.util y otros paquetes también? Eso seguro ahorrará algo de mecanografía :)

Así que explique por qué no se hace esto.

+7

¿De qué sirve tener paquetes separados si pudiéramos tenerlos todos en un solo paquete y que se importen automáticamente? Piénsalo. – MAK

+4

Ya ... pensé en ello. Es por eso que la pregunta !! ¿Por qué no está hecho? – gameover

Respuesta

26

Una buena razón para no autoimportarse demasiado es evitar los conflictos de espacio de nombres. Si todo en java.util se importó automáticamente y luego quería referirse a una clase diferente llamada 'Mapa', por ejemplo, tendría que referirse a él por su nombre completo.

En respuesta a otras respuestas en este hilo, import en realidad no modifica la representación interna de sus archivos de clase. De hecho, aquí hay un link a la especificación de JVM que describe la estructura del archivo de clase: vea que las importaciones no se almacenan en ningún lado.

+0

+1, esa es la verdadera respuesta IMO. – MAK

+0

+1: No solo eso, sino que algunos nombres de clases aparecen en diferentes espacios de nombres incluso en la biblioteca estándar de Java. Por ejemplo: java.util.List y java.awt.List. – Powerlord

+4

Esa es una especie de respuesta "es porque es". Claro, si quisieras otro mapa (java.util), entonces tendrías que calificarlo completamente, pero si quieres otro proceso (java.lang) igual tendrás que hacerlo. La pregunta sigue siendo: ¿qué tiene de especial el conjunto de clases en java.lang que siempre se importa y nada más? ¿Gosling pensó que estaríamos usando StrictMath más a menudo que List? – Ken

3

Todos los buenos IDE resuelven sus importaciones automáticamente, solo solicitando cuando hay un conflicto (dos paquetes con el mismo nombre de clase).

2

Porque java.lang tiene las clases básicas de Java y java.util, por ejemplo, no.

Sin embargo, algunos otros idiomas, como el maravilloso importa automáticamente java.util para ti :)

1

creo que la idea detrás de java.lang es que todas estas clases tienen alguna relación con el lenguaje y el tiempo de ejecución, que es especial, y no se puede implementar por su cuenta. Contenedores primitivos, seguridad de VM y permisos e inspección, carga de paquetes y clases: todo lo que debe incorporarse al sistema Java. Todo en java.util, como colecciones, aunque increíblemente útil, podría implementarse en Java puro. Algunas partes de esto (los husos horarios vienen a la mente) incluso han sido implementadas por bibliotecas de terceros, incluso mejor.

O al menos, eso era cierto en los 1.0 días de Java. Hoy, por ejemplo, Iterator también es parte integral del lenguaje, ya que se usa automáticamente para cada bucle, ¿verdad? Pero la compatibilidad con versiones anteriores siempre fue una gran cosa con Java, por lo que podemos vivir con esta inconsistencia para siempre.

+0

Esto realmente no explica las cosas. Podrían haber autoimportado nada o haber importado automáticamente más que solo java.lang.Las autoimportaciones son una característica práctica. – Antimony

0

Encontré una colisión de espacio de nombres incluso con java.lang.System (nuestra aplicación contiene una clase denominada Sistema). Una importación explícita resolvió mi problema, pero me tomó algunos minutos hasta que señalé que com.mycompany.classes.System no se importa automáticamente para el identificador System by Eclipse porque ya existe en java.lang.

De todas formas, no es una buena idea para contaminar el ámbito de la clase con demasiados identificadores, ya que el código se org.classes.**look** com.application.**like** com.classes.**this**.

Auto-importación java.lang es una buena idea, ya que contiene las clases muy básicas e interfaces utilizadas en java

0

@gameover, Puede ser todos los programas Java necesita la clase que viene de java.lang,

pero la clase de java.util contiene la clase que mi ser necesario o no que se depende de programador. Entonces java tiene la configuración predeterminada para java.lang, pero tenemos que importar a las clases java.util según nuestro programa.

-2

La importación automática también provoca problemas de memoria y algunas veces puede entrar en conflicto. Por ejemplo: Tipo de fecha en java & SQL.

También cualquiera que sea el núcleo base de los objetos Java se define en el paquete Java.lang. Por ejemplo: cualquier tipo de datos & return type todos están declarados en el paquete java.lang así que para hacer algún programa básico también necesitamos este paquete de importaciones.

+0

No genera problemas de memoria de tiempo de ejecución. Y los problemas de tiempo de compilación son probablemente insignificantes –

0

El paquete java.lang proporciona clases fundamentales para crear programas Java. Object es la raíz de la jerarquía de clases, por lo que debe estar disponible para todos los programadores, ya sea que el programador sea principiante o experto.

Si bien hablamos de otros paquetes, se utilizan para ampliar los programas. Por ejemplo, el paquete java.util que solo se usa cuando se necesitan clases de Colección. Mientras que en cada programa las clases de Colección no se usan, mientras que los tipos de datos básicos son esenciales para cada programa de Java.

Para evitar la carga innecesaria de otras clases en el programa, otros paquetes no se importan automáticamente, mientras que el paquete esencial java.lang se importa automáticamente.

0

Hay razón diferente para convertirse en java.lang paquete es por defecto 1) En realidad, lo estamos declarando variable en Java program.that se almacena en el objeto, la clase de objeto está disponible en package.it java.lang es una superclase de jerarquía de clases, muchas hemos realizado operaciones en el método de clases de objetos, como la programación de subprocesos. 2) Muchos tiempo que se requiere para el programa de desarrollo de la clase, esa clase está disponible en el paquete java.lang, lo tanto, es necesario importar, cuando las personas desarrollan java jdk, era paquete por defecto,

-4

Sin java.lang paquete, el desarrollo no es posible. Pero sin java.util, java.io o cualquier otro paquete, aún podemos escribir cualquier número de programas. Esa es la razón por la cual el paquete java.lang se está importando de manera predeterminada.

Cuestiones relacionadas