سؤال

وه كان واحدا من تلك الأيام يمكن للشخص مساعدتي مع هذا.

ولقد 2 كائنات المالية التي أريد لمقارنة خصائص في وقت التشغيل. حالة واحدة هي الحالة مؤقتا، والآخر هو مثيل الأسهم الجديدة التي للتو تم تسليمها إلى نظام بلدي، التي قد تكون أو لا يساوي المثال مؤقتا. انظر أدناه حيث m هي طريقة من المخزون الصف والسهم مثيل المالية

try {

// I want to compare these two objects, return type of m may vary
Object result = m.invoke(stock);
Object cacheResult = m.invoke(stockCache.get(ticker));

// The return type of m may vary but is known at runtime
Class returnType = m.getReturnType();

// I assume I need to cast before .equals() will work correctly
if(result.equals(cacheResult)) {
    // Will this work or do I need to cast
}

  }catch (Exception ex) {
 }

وتحرير: بالنسبة لأولئك الذين سئلوا عن السبب الذي أستخدمه التفكير، وأنا على استخدام إطار DWR العكس اياكس وأنا أحاول أن تعيين خاصية HTML معرف لخصائص الكائن بلدي، والسماح لي لتعليم ممتلكاتي مع HTML المرتبطة بها قيمة id. عند الضغط الكائن على واجهة المستخدم هذه الطريقة ستسمح لي لدفع الخصائص التي تغيرت فقط وليس الكائن بأكمله.

هل كانت مفيدة؟

المحلول

ويجب أن لا تحتاج إلى المدلى بها. سوف جافا اختيار طريقة equals الصحيح تلقائيا. أنصحك تصحيح هذا الخط لمعرفة ما Class كل كائن هو.

نصائح أخرى

لا، أنت لا تحتاج إلى المدلى بها. عادة، يساوي أسلوب يشبه

@Override
public boolean equals(Object o){

   if (! o instance of ThisClass){
      return false;
   }

   //other equality tests based on members
 }

إذا ذاكرة التخزين المؤقت يحمل واحد فقط، كائنات فئة (أي لا التخزين المؤقت الفئات المشتقة)، فإنه يجب أن تعمل. يبدو أنك تخزين كائنات في StockCache الخاص بك. ربما هذا هو قليلا عام جدا، وسوف تضييق لبعض الفئة الأساسية (ربما StockClass) أن يكون خيارا أفضل. ثم، جالبة الخاص بك سوف، الذي يعرف في الصف ذاكرة التخزين المؤقت ستكون كما يلي:

StockObject getStockObject(KeyType key);

وبالإضافة إلى ذلك، يبدو وكأنه انعكاس مبالغة (إذا كان لديك دينا بالفعل الكائنات التي تريد للمقارنة، لماذا استخدام التفكير؟)

وسوف صب ليس له أي تأثير هنا. والنتيجة تعتمد كليا على كيف يساوي يتم تنفيذ () في الطبقة المالية.

ولكن لماذا تستخدمه انعكاس لهذا على أية حال؟ انها على الأرجح ليس الشيء الصحيح الذي ينبغي عمله.

وإلقاء نظرة على هذا:

http://code.google.com/p/simplestuff

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