programacion - que es package en java
¿Cómo acceder a las clases de Java en el paquete predeterminado? (4)
De hecho, puedes.
Usando Reflections API puedes acceder a cualquier clase hasta ahora. Al menos pude :)
Class fooClass = Class.forName("FooBar");
Method fooMethod = fooClass.getMethod("fooMethod", String.class);
String fooReturned = (String)fooMethod.invoke(fooClass.newInstance(), "I did it");
Estoy trabajando ahora junto con otros en un proyecto de Grails. Tengo que escribir algunas clases de Java. Pero necesito acceder a un objeto de búsqueda creado con groovy. Parece que este objeto debe colocarse en el paquete predeterminado.
Mi pregunta es: ¿hay alguna manera de acceder a este objeto en el paquete predeterminado de una clase Java en un paquete con nombre?
Puede usar paquetes en el código de Groovy
, y las cosas funcionarán bien.
Puede significar una reorganización menor del código en grails-app
y un poco de dolor al principio, pero en un proyecto de gran grails, tiene sentido organizar las cosas en paquetes. Utilizamos la convención de nomenclatura de paquetes estándar de Java com.foo.<app>.<package>
.
Tener todo en el paquete predeterminado se convierte en un obstáculo para la integración, como usted está encontrando.
Los controladores parecen ser el único artefacto (o artefacto) de Grails que se resiste a ser puesto en un paquete de Java. Probablemente aún no haya resuelto la Convention
para eso. ;-)
No puede usar clases en el paquete predeterminado de un paquete nombrado.
( Técnicamente se puede, como se muestra en la answer Sharique Abdullah a través de API de reflexión, pero las clases del espacio de nombres sin nombre no están en el alcance en una declaración de importación )
Antes de J2SE 1.4, podías importar clases desde el paquete predeterminado usando una sintaxis como esta:
import Unfinished;
Eso ya no está permitido . Por lo tanto, para acceder a una clase de paquete predeterminada desde dentro de una clase empaquetada, se requiere mover la clase de paquete predeterminada a un paquete propio.
Si tiene acceso a la fuente generada por Groovy, se necesita algo de procesamiento posterior para mover el archivo a un paquete dedicado y agregar esta directiva de "paquete" al comienzo.
Actualización 2014: el error 6975015 , para JDK7 y JDK8, describe una prohibición aún más estricta contra la importación del paquete sin nombre.
El
TypeName
debe ser el nombre canónico de un tipo de clase, tipo de interfaz, tipo de enumeración o tipo de anotación.
El tipo debe ser un miembro de un paquete con nombre , o un miembro de un tipo cuyo tipo de encierro léxico más externo es un miembro de un paquete con nombre , o se produce un error en tiempo de compilación .