Una forma de Java / Beanshell en varios idiomas para comprobar si hay nulos y nulos

En BeanShell las variables pueden ser nullo void. ¿Hay alguna manera de probar ambos (o al menos void) usando un código que funcione (sin modificar, es decir, copiado / pegado) tanto en BeanShell como en Java? Algo así como: SomeUtilityClass.isNullOrVoid(...).

Trabajo con scripts complejos de BeanShell y ser capaz de copiar / pegar código de un IDE de Java en un script ayuda mucho con mi productividad y la calidad del código (sí, eso significa que no estoy usando las funciones de scripts de BSH). El único problema es probar, lo voidque me obliga a ajustar manualmente cada script después.

Problemas con void:

  • Un cheque para nullno atrapa void:

String foo; System.out.println("is null: "+ (foo == null));

imprime is null: false, lo que conduce a un código como el if (var != void && var != null) { ... }que no funciona en Java (y declararlo voidcomo una constante es imposible ya que es una palabra reservada)

  • bsh.NameSpaceno tiene un método para verificar voidy getVariable(...)devuelve void:

String foo; System.out.println("variable: "+ this.namespace.getVariable("foo"));

imprime, variable: voidasí que volvemos al punto de partida. Incluso si hubiera un método para hacer eso allí (digamos que escribiría una subclase NameSpace personalizada con un método apropiado y setNameSpace(...)eso) necesitaría ser una forma de invocarlo en un entorno cruzado (vea el siguiente punto).

  • escribir una clase auxiliar personalizada con un método como isNull(Object bshNameSpace, String varName, Object var)parece ser imposible.

Un método auxiliar como este:

public class Helper {
  public static boolean isNullOrVoid(This bshThis, String name) throws Exception {
    Primitive p = (Primitive) bshThis.getNameSpace().getVariable(name);
    return p == Primitive.NULL || p == Primitive.VOID;
  }
}

funciona bien desde BeanShell, pero no hay forma (que yo sepa) de volver a trabajar para que funcione en Java (usando la reflexión o no) ya que necesita trabajar con variables de método, no campos de instancia. Una versión alternativa (torpe):

  public static boolean isNullOrVoid(Object bshThis, String name, Object var) throws Exception {
    if (!(bshThis instanceof This)) {
      return var == null;
    }
    Primitive p = (Primitive) ((This)bshThis).getNameSpace().getVariable(name);
    return p == Primitive.NULL || p == Primitive.VOID;
  }

funciona desde Java pero no BeanShell si el tercer parámetro es un argumento indefinido .

  • declarar un comando BSH personalizado tampoco es una opción.

Incluso si el método auxiliar se define en el script mismo, explota exactamente de la misma manera con una excepción de argumento Indefinido :

public boolean isNullOrVoid(Object var) {
    return var == null || var == void;
}
String foo;
System.out.println(isNullOrVoid(foo));
Respuesta 1

Estoy usando un patrón de publicación y suscripción en jms para implementar el feed de negociación en una aplicación financiera. Sin embargo, la aplicación requiere que los datos del feed se muestren sin demora. Esta aplicación ...

Estoy trabajando en un proyecto que tiene un módulo EJB. Ha habido un problema con este módulo que no entra en nuestro repositorio maven (Nexus), debido al hecho de que carece de numeración de versión. Soy ...

Esto es para un desafío de codificación en codewars. Condiciones del desafío: Considere una secuencia u donde u se define de la siguiente manera: El número u (0) = 1 es el primero en u. Para cada x en u, entonces y = 2 * ...

Tengo un programa que lee un archivo de entrada con 4000 1's o 0's, uno en cada línea. El programa se compila bien pero cuando se ejecuta me sale el siguiente error: ˇ˛0Excepción en el hilo "main" java.util ....