Вопрос

Является ли java.lang.Class таким же, как фактический файл .class?т. е.эквивалентно ли содержание?

Я хочу отправить .class через сокет, и мне было интересно, могу ли я вместо того, чтобы пытаться найти и загрузить фактический файл .class, просто передать java.lang.Вместо этого Class?

Разработка (читайте, если хотите больше информации)

Предположим, у меня есть Java-класс под названием someObj.Когда этот файл будет скомпилирован, будет сгенерирован файл с именем SomeObj.class.

Мы также знаем, что если у меня есть someObj в качестве типа, мы могли бы получить его java.lang.Тип класса, выполнив:

Class someObjClss = SomeObj.class;

Мы знаем java.lang.Класс реализует Serializable, таким образом, он может быть передан.

Итак, является ли java.lang.Class в основном объектным представлением фактического файла .class?

Обновить:

Предполагая, что я передал файл .class на другой хост, могу ли я просто использовать метод defineClass() для создания класса обратно?

Ссылка здесь

ОБНОВЛЕНИЕ 2:

Этот код действительно возвращает null InputStream .Как это возможно?

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());
}
Это было полезно?

Решение

Нет. java.lang.Class это класс java.У него есть свой собственный файл .class :-) An экземпляр из java.lang.Class привык к представлять класс вашего объекта, позволяющий вам выполнять определенные операции (напримериспользуйте reflection API) для этого.

Сериализация вообще не имеет ничего общего с файлом .class - это состояние объекта это становится сериализованным.Если бы вы должны были сериализовать Class<MyObject> и отправьте это по проводу в JVM, у которой нет MyObject.class , она все равно не будет знать, что такое MyObject.

Зачем вам это нужно вручную отправить .класс по проводам для начала?Для решения этой проблемы существуют удаленные загрузчики классов.

Другие советы

A java.lang.Class экземпляр связан с соответствующим файлом ".class", но они ни в коем случае не эквивалентны.

В java.lang.Class экземпляр кодирует сигнатуру типа для файла ".class", но не намного больше.Таким образом, хотя java.lang.Class может быть сериализован, но это не дает вам достаточных возможностей для создания экземпляра соответствующего класса на другом конце.Если вы хотите это сделать, вам следует отправить файл ".class".

Я думаю, что OP пытается идентифицировать файл по пути к классу, в котором существует файл класса.Видишь http://asolntsev.blogspot.com/2008/03/how-to-find-which-jar-file-contains.html

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top