Java: .class File e java.lang.class
-
21-09-2019 - |
Pergunta
Java.lang.class é o mesmo que o arquivo .class real? ou seja, o conteúdo é equivalente?
Quero enviar a classe. Classe sobre o soquete e queria saber se, em vez de tentar encontrar e carregar o arquivo .class real, se eu pudesse transmitir o java.lang.class?
Elaboração (Leia se quiser mais informações)
Suponha que eu tenha uma aula de java chamada algumbj. Quando este arquivo é compilado, um arquivo chamado algumbj.class será gerado.
Também sabemos que, se eu tiver algum tipo de tipo, poderíamos obter seu tipo java.lang.class fazendo:
Class someObjClss = SomeObj.class;
Conhecemos java.lang.class implementos serializáveis, portanto, pode ser transmitido.
Então, java.lang.class é basicamente a representação do objeto do arquivo .class real?
ATUALIZAR:
Supondo que eu transmitisse o arquivo .class para outro host, eu apenas uso o método DefLeClass () para construir a classe de volta?
Link aqui
Update2:
Este código retorna NULL InputStream. Como isso é possível?
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());
}
Solução
Não. java.lang.Class
é uma aula de java. Tem seu próprio arquivo .class :-) um instância do java.lang.Class
é usado para representar Classe do seu objeto, permitindo que você execute determinadas operações (por exemplo, use a API de reflexão) nele.
A serialização não tem nada a ver com o arquivo .class. estado de objeto Isso é serializado. Se você fosse serializar Class<MyObject>
e envie isso sobre o fio para uma JVM que não possui MyObject.class, ainda não saberia o que é o MyObject.
Por que você precisa manualmente Envie. Classifique sobre o fio para começar? Existem carregadores de classe remotos para lidar com isso.
Outras dicas
UMA java.lang.Class
A instância está relacionada a um arquivo ".class" correspondente, mas eles não são de forma alguma equivalentes.
o java.lang.Class
A instância codifica a assinatura do tipo para um arquivo ".class", mas não muito mais. Então, embora um java.lang.Class
Pode ser serializado, isso não fornece o suficiente para permitir que uma instância da classe correspondente seja instanciada na outra extremidade. Se você quiser fazer isso, deve enviar o arquivo ".class".
Eu acho que o OP está tentando identificar um arquivo no caminho de classe no qual o arquivo de classe existe. Ver http://asolntsev.blogspot.com/2008/03/how-to-find-which-jar-file-contains.html
Dar uma olhada em RMI (Invocação do Método Remoto).