Question

est java.lang.Class le même que le fichier .class réel? à-dire l'équivalent est contenu?

Je veux envoyer le .class sur socket, et je me demandais si, au lieu d'essayer de trouver et de charger le fichier .class réel, si je pouvais transmettre le java.lang.Class à la place?

Elaboration (lire si vous voulez plus d'informations)

Supposons que j'ai une classe Java appelée unObj. Lorsque ce fichier est compilé, sera généré un fichier appelé SomeObj.class.

Nous savons aussi que si je unObj comme un type, nous pourrions obtenir ce type java.lang.Class en faisant:

Class someObjClss = SomeObj.class;

Nous savons que java.lang.Class implémente Serializable, ainsi il peut être transmis.

est java.lang.Class essentiellement la représentation de l'objet du fichier .class réelle?

Mise à jour:

En supposant que j'ai transmis le fichier .class à un autre hôte, que je viens d'utiliser la méthode defineClass () pour construire la classe de retour?

MAJ2:

Ce code fait des rendements InputStream null. Comment est-ce possible?

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());
}
Était-ce utile?

La solution

Non. java.lang.Class est une classe java. Il a son propre fichier .class :-) par exemple de java.lang.Class est utilisé pour représentent la classe de votre objet vous permettant d'effectuer certaines opérations (par exemple l'utilisation de l'API de réflexion) sur elle .

sérialisation n'a rien à voir avec le fichier .class du tout - il est état de l'objet qui se sérialisé. Si vous deviez sérialisation Class<MyObject> et envoyer que sur le fil à une machine virtuelle Java qui n'a pas MyObject.class, il ne serait pas savoir ce que MyObject est.

Pourquoi avez-vous besoin manuellement envoyer .class sur le fil pour commencer? Il y a des chargeurs de classe à distance pour faire face à cela.

Autres conseils

Une instance de java.lang.Class est liée à un fichier « .class » correspondant, mais ils ne sont pas des moyens équivalents.

L'instance java.lang.Class code la signature de type pour un fichier « .class », mais pas beaucoup plus. Ainsi, si un java.lang.Class peut être publié en feuilleton, faisant ne vous donne pas assez pour permettre une instance de la classe correspondant à instancier à l'autre extrémité. Si vous voulez faire cela, vous devez envoyer le fichier « .class ».

Je pense que l'OP tente d'identifier un fichier sur le chemin de classe dans lequel le fichier de classe existe. Voir http: //asolntsev.blogspot .com / 2008/03 / how-to-find-qui-jar-file-contains.html

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top