Java: archivo .class y java.lang.Class
-
21-09-2019 - |
Pregunta
Es java.lang.Class el mismo que el archivo .class real? es decir, es el equivalente contenido?
Quiero enviar el .class sobre zócalo, y se preguntaba si en lugar de tratar de encontrar y cargar el archivo .class real, si tan sólo pudiera transmitir el java.lang.Class lugar?
Elaboración (leer si quieres más información)
Supongamos que tengo una clase Java llamada someObj. Cuando se compila este archivo, un archivo llamado SomeObj.class se generará.
También sabemos que si tengo someObj como un tipo, podríamos obtener su tipo java.lang.Class haciendo:
Class someObjClss = SomeObj.class;
Sabemos java.lang.Class implementa Serializable, por lo que se puede transmitir.
Así es java.lang.Class básicamente la representación de objetos del archivo .class real?
ACTUALIZACIÓN:
Suponiendo que he transmitido el archivo .class a otro host, no sólo tiene que utilizar el método defineClass () para construir la clase de nuevo?
Update2:
Este código hace rendimientos InputStream nula. ¿Cómo es posible?
Class clazz = String.class;
String className = clazz.getName(); System.out.println(className);
URL url = clazz.getResource(className);
if( url != null )
{
String pathName = url.getPath(); System.out.println(className);
}
InputStream inputStream = clazz.getResourceAsStream(className);
if(inputStream != null )
{
System.out.println(inputStream.available());
}
Solución
No. java.lang.Class
es una clase Java. Tiene su propio archivo .class :-) Un ejemplo de java.lang.Class
se utiliza para representan clase del objeto que le permita realizar ciertas operaciones (por ejemplo, el uso de la API de reflexión) en él .
La serialización no tiene nada que ver con el archivo .class en absoluto - es estado del objeto que se serializado. Si se va a serializar Class<MyObject>
y enviarla a través del cable a una JVM que no tiene MyObject.class, todavía no se sabe qué es MiObjeto.
¿Por qué necesita a manualmente enviar .class sobre el alambre para empezar? Hay cargadores de clases a distancia para hacer frente a esto.
Otros consejos
Una instancia java.lang.Class
está relacionada con un archivo correspondiente ".class", pero son de ninguna manera equivalente.
La instancia java.lang.Class
codifica la firma de tipo de archivo ".class", pero no mucho más. Así, aunque un java.lang.Class
se puede serializar, al hacerlo no proporcionar suficiente para permitir que una instancia de la clase correspondiente a una instancia en el otro extremo. Si quieres hacer eso, usted debe enviar el archivo ".class".
Creo que el PO está tratando de identificar un archivo en la ruta de clase en el que existe el archivo de clase. Ver http: //asolntsev.blogspot .com / 2008/03 / how-to-find-cual-jar-file-contains.html
Tome un vistazo a RMI (Remote Method Invocation) .