Topic
  • 2 replies
  • Latest Post - ‏2008-06-13T20:45:18Z by SystemAdmin
SystemAdmin
SystemAdmin
757 Posts

Pinned topic simple import .* vs specific

‏2007-08-29T22:42:09Z |
hi,
very simple question that i've wondered for a while.
is there anything bad with using import XXXX.XXXX.*; vs doing a single line import
for individual classes required?

seems to me that the compiler should just not link any import of classes that are not used, rather than having to specifically write each class so that unnessicary ones arnt linked aswell.
Updated on 2008-06-13T20:45:18Z at 2008-06-13T20:45:18Z by SystemAdmin
  • SystemAdmin
    SystemAdmin
    757 Posts

    Re: simple import .* vs specific

    ‏2007-12-17T06:31:06Z  
    After the compilation the field and argument types are fully qualified (i.e no imports in the .class file.) the only difference is at the source level, if there are names that are the same in two or more packages (import xxx.*). In that case you'll end up with ambiguous type error, and you have to use fully qualified name instead of using just simple name (which is not very convenient and clatters the source, especially if you use the same type many times in the same source file.)

    package a;
    public class X {}

    package b;
    public class X {}

    package c;
    import a.*;
    import b.*;
    class Main {
    X x; // compiler error, you have to use fully qualified name
    }
  • SystemAdmin
    SystemAdmin
    757 Posts

    Re: simple import .* vs specific

    ‏2008-06-13T20:45:18Z  
    Depende, si estas trabajando con paquetes robustos es mejor que uses el tipo de import foo.*;

    Pero si es el caso en que son paquetes que esten dentro de tu proyecto de desarrollo y sospeches de estar haciendo duplicidad en el nombrado de clases seria mejor que realices un import especifico.

    ten cuidado tambien que para algunos apis se manejan a veces clases con el mismo nombre por ejemplo Util o BeanUtils (apache y spring tienen el propio).

    Como muchas cosas en java queda a tu libre eleccion. ahora si son clases de paquetes de java no hay problema, ahi no encontraras confusion de nombres. java.lang o en java.util recuerda que el wildcard "*" solo sirve para importar todas las clases del paquete no todos los paquetes dentro del paquete a importar