سؤال

هل java.lang.class هو نفسه ملف .class الفعلي؟ أي هل المحتوى مكافئ؟

أريد إرسال .class عبر المقبس ، وكنت أتساءل عما إذا كان بدلاً من محاولة العثور على ملف .class الفعلي وتحميله ، إذا كان بإمكاني إرسال java.lang.class بدلاً من ذلك؟

التفصيل (اقرأ إذا كنت تريد المزيد من المعلومات)

لنفترض أن لدي فئة Java تسمى SomeObj. عند تجميع هذا الملف ، سيتم إنشاء ملف يسمى SomeObj.class.

نعلم أيضًا أنه إذا كان لدي بعض الشيء كنوع ، فيمكننا الحصول على نوع java.lang.class عن طريق العمل:

Class someObjClss = SomeObj.class;

نحن نعلم java.lang.class الأدوات التسلسلية ، وبالتالي يمكن نقلها.

فهل java.lang.class أساسًا تمثيل كائن ملف .class الفعلي؟

تحديث:

على افتراض أنني قمت بنقل ملف .class إلى مضيف آخر ، هل يمكنني فقط استخدام طريقة DefereClass () لبناء الفصل مرة أخرى؟

وصلة هنا

Update2:

هذا الرمز يرجع 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 هو فئة جافا. لديها ملف .class الخاص به :-) نموذج من java.lang.Class يستخدم ل تركيز فئة من كائنك تسمح لك بإجراء عمليات معينة (مثل استخدام API) على ذلك.

التسلسل لا علاقة له بملف .class على الإطلاق - إنه حالة الكائن التي تحصل على التسلسل. إذا كنت تريد التسلسل Class<MyObject> وأرسل ذلك فوق السلك إلى JVM الذي لا يحتوي على myobject.class ، لا يزال لا يعرف ماهية myobject.

لماذا تحتاج إلى يدويًا أرسل .class فوق السلك لتبدأ؟ هناك لوادر فئة عن بُعد للتعامل مع هذا.

نصائح أخرى

أ java.lang.Class يرتبط المثيل بملف ".class" المقابل ، لكنه لا يعادل بأي حال من الأحوال.

ال java.lang.Class يقوم المثيل بتشفير توقيع النوع لملف ".class" ، ولكن ليس أكثر من ذلك بكثير. لذلك ، على الرغم من أ java.lang.Class يمكن أن يكون متسلسلًا ، لا يوفر لك ذلك ما يكفي للسماح بتأسيس مثيل للفئة المقابلة في الطرف الآخر. إذا كنت تريد القيام بذلك ، فيجب أن ترسل ملف ".class".

أعتقد أن OP يحاول تحديد ملف على ClassPath الذي يوجد فيه ملف الفصل. يرى http://asolntsev.blogspot.com/2008/03/how-to-find-hich-jar-file-contains.html

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top