Cargando una clase Java con dependencia de código nativo

Estoy escribiendo un programa que carga todas las clases de una carpeta específica.

Algunas de las clases están creando objetos en bloque estático y estos objetos a su vez están haciendo algunas llamadas nativas durante su creación. Como no tengo la biblioteca nativa, veo un java.lang.UnsatisfiedLinkError

Aquí hay un escenario de ejemplo.

Class A extends SuperA
{
  public static B b = new B(); 
  ...
  ...
}

Class B
{
   public B()
   {
      someNativeCall(); // Causing the LinkError
   }
}

Class.forName("A"); // Loading of Class A

Estoy cargando la Clase A aquí para verificar algunas de sus propiedades, como sus Superclases, etc. Por lo tanto, ni siquiera me importa si se crea B o no :) Ya que puede haber muchas clases como A en una carpeta determinada, ¿está ahí? ¿Una forma genérica de asegurarse de que la carga de clases como A no falla?

Actualización: Sé que la biblioteca nativa debe estar presente y cómo debe agregarse. Pero no tengo la biblioteca nativa y, por lo tanto, solicito este truco.

Respuesta 1

Hay una sobrecarga Class.forNameque le permite especificar si desea inicializar la clase o no (y no, si solo quiere reflejarlo un poco):

class X {

    static { if (true) throw new ExceptionInInitializerError("OH NOES!!!"); }

}

public class Y {
    public static void main(String[] args) throws Throwable{
        // Breaks:
        System.out.println(Class.forName("X").getSuperclass());
        // Works:
        ClassLoader cl = Thread.currentThread().getContextClassLoader();
        System.out.println(Class.forName("X", false, cl).getSuperclass());
    }
}
Respuesta: 2

¿Quizás podría codificar generar, compilar y cargar versiones simuladas de las bibliotecas nativas que faltan? Aunque parece mucho trabajo.

Respuesta: 3

Ahora estoy escribiendo un Marco ORM y me importa mucho el rendimiento. En este Framework, tengo que usar instanceof y Class.isAssignableFrom para verificar la compatibilidad de tipos. Entonces tengo una pequeña duda sobre ...

Tengo un método que generalmente toma un elemento de una lista y tiene una firma de: myMethod (elemento T) Quiero usar este método pero sé lo que estoy enviando. SpecificItem myItem = nuevo ...

Quiero almacenar ciertos objetos en un HashMap. El problema es que, por lo general, solo usa un solo objeto como clave. (Puede, por ejemplo, usar una cadena.) Lo que quiero hacer para usar varios objetos. Por ...

Tengo que hacer una llamada SOAP desde mi programa java, para lo cual utilicé el eje apache. Mi programa es el siguiente: import org.apache.axis.client.Call; import org.apache.axis.client.Service; import javax.xml ....