Saltar al contenido

Aprende lo básico de trabajar con JShell con esta guía

Como se mencionó antes, JShell hace un excelente trabajo ayudándonos a explorar nuevas bibliotecas. Así que, asumamos que queremos probar la biblioteca de Guayaba.

Puedes descargar el archivo JAR de Guava 23.0 (el último en este momento) aquí.

Aprende lo básico de trabajar con JShell con esta guía
Aprende lo básico de trabajar con JShell con esta guía

En una sesión de JShell, se obtiene el siguiente conjunto de importaciones por defecto:

123456789101112jshell;/importsjshell;/imports|importjava.io.*|importjava.math.*||importjava.net.*|importjava.nio.file.*|importjava. util.*||importarjava.util.concurrente.*||importarjava.util.función.*||importarjava.util.prefs.*|importarjava.util.regex.*|importarjava.util.stream.*

java

Puede importar otros paquetes, pero ¿cómo sabe JShell dónde buscar paquetes personalizados?

Considere el siguiente caso:

1jshell.mycom.*

java

Lo que hay que hacer es añadir los paquetes al classpath de JShell con el comando /env -class-path (si ya hemos iniciado una sesión de JShell) o la opción $jshell –class-path (en la línea de comandos).

Puede especificar un directorio (en este ejemplo, es el directorio actual):

1jshell;/env -class-path .

java

O una lista de directorios, JARs, o archivos ZIP para buscar archivos de clase compilados (la lista debe estar separada con : en Linux/Mac y ; en Windows). Puede obtener más información ejecutando /help context.

De esta manera, asumiendo que ha descargado el JAR de la Guayaba en C:, podemos ejecutar el siguiente comando:

12jshell;/env -class-path C:guava-23.0.jar|Settingnew options and restoring state.

java

Como pueden ver en el mensaje, restaurará la sesión con el nuevo ajuste de classpath, lo que significa que ejecutará todos los recortes válidos ejecutados hasta ese momento.

Si la biblioteca que quieres probar depende de otras bibliotecas, tienes que descargar esas dependencias y añadirlas también al classpath.

Ahora, puedes importar las clases de los paquetes de Guayaba. Empieza a escribir:

1jshell.importcom.google.common.primitives.

java

Y luego presione Tab para que JShell pueda presentar algunas opciones:

12345jshell;importcom.google.common.primitives.BooleansBytesCharsDoublesFloatsImmutableDoubleArrayImmutableIntArrayImmutableLongArrayIntsLongsPrimitivesShortsSignedBytesUnsignedBytesUnsignedIntegerUnsignedIntsUnsignedLongAnsignedLongs

java

Aquí es donde el autocompletado de JShell es útil.

La capacidad de autocompletar de JShell le permite ver:

  • Clases en un paquete
  • Miembros de la clase
  • Los parámetros requeridos por un método
  • La lista de sobrecargas de un método
  • Documentación de las clases y sus miembros

Importemos la clase de los Longs:

1jshell.importcom.google.common.base.Longs

java

Si escribimos Longs. y presionamos Tab , JShell mostrará los miembros estáticos de la clase:

123456789jshell;Longs.BYTES MAX_POWER_OF_TWOasList(classcompare(concat(constrainToRange(contains(ensureCapacity(fromByteArray(fromBytes(hashCode(indexOf(join(lastIndexOf(lexicographicalComparator()max(min(stringConverter()toArray(toByteArray(tryParse(

java

Los nombres que no van seguidos de paréntesis (como BYTES) son variables estáticas. Todos los demás nombres son métodos estáticos:

  • Si el nombre del método va seguido de () (como lexicográficoComparador()), significa que el método no requiere ningún argumento.
  • Si el nombre del método va seguido de un paréntesis de apertura, (, significa que el método requiere al menos un argumento o que está sobrecargado.

Si quiere saber más sobre el método indexOf escriba el nombre de este método y su paréntesis de apertura (el nombre también puede ser autocompletado), y pulse Tab :

123456jshell;Longs.indexOf(Firmas:intLongs.indexOf(long[] array,long target)intLongs.indexOf(long[] array,long[] target);pulse la tecla de nuevo para ver la documentación;

java

Si presionas Tab de nuevo, verás el Javadoc de la primera sobrecarga:

12345jshell;Longs.indexOf(intLongs.indexOf(long[] array,long target)<;no se ha encontrado documentación;

java

En este caso, no se encuentra documentación. Pero puedes seguir presionando Tab para ver la documentación de los siguientes métodos:

12345jshell;Longs.indexOf(intLongs.indexOf(long[] array,long[] target)<;no se ha encontrado documentación;

java

Puedes hacer este tipo de exploración con cualquier clase, incluso a nivel de clase:

12345678910111213141516171819jshell;StringStringBufferStringBufferInputStreamStringBuilderStringIndexOutOfBoundsExceptionStringJoinerStringReaderStringTokenizerStringWriterStringsSignatures:java.lang.String&lt;pulse la tecla tab de nuevo para ver la documentación lang.StringLaStringclass representa cadenas de caracteres. Todos los literales de cadenas en los programas de Java, como "abc", se implementan como instancias de estaclass... A menos que se indique lo contrario, al pasar un argumento nulo a un constructor o método de estaclass will&lt;pulse tab de nuevo para ver la página siguiente
java

O con cualquier objeto para mostrar sus miembros de instancia:

123jshell; "Hello".charAt(chars()codePointAt(codePointBefore(codePointCount(...

java