كيف يمكنني استخدام الوكيل الحيوية على منشئات التي تأخذ الحجج؟

StackOverflow https://stackoverflow.com/questions/1001191

  •  05-07-2019
  •  | 
  •  

سؤال

ولقد حاولت استخدام رمز شارك الشمس على هم <لأ href = "http://java.sun.com/j2se/1.3/docs/guide/reflection/proxy.html" يختلط = "نوفولو noreferrer" > صفحة استخدام وكيل ، وحاولت استخدام DebugProxy لطباعة الطريقة التي يتم استدعاء. الشيء هو، وجوه أنا خلق وكيل ل، يحتاج إلى حجة. إذا حاولت إنشاء الوكيل مع وسيطة إلى المنشئ، أتلقى الخطأ التالي:

Exception in thread "main" java.lang.ClassCastException: $Proxy0 cannot be cast to myPackage.myClass

وأنا خلقت الوكيل مثل هذا:


MyClass mc = (MyClass) DebugProxy.newInstance(new MyClass(props));

وكيف يمكنني إنشاء مثيل الوكيل، ولا يزال استدعاء منشئ الصحيح؟

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

المحلول

وكيل

وTheJDK ولدت، ليست من نفس النوع الطبقة ككائن كنت إنشاء وكلاء. بدلا من ذلك، تطبق نفس اجهات الكائن الهدف. تحتاج للادلاء إلى واحد من هذه الأنواع واجهة.

إذا ننظر إلى مثال على الصفحة التي ترتبط، انها الصب لفو، وليس FooImpl.

نصائح أخرى

هل صفك تنفيذ بعض اجهة كنت تحاول اختبار؟ دروس الوكيل تنفيذ فقط الأساليب من واجهة. إذا كنت ترغب في طباعة قبل / بعد كل طريقة من فئة (سواء كان ذلك لمقاييس أو التصحيح) وأود أن يوحي باستخدام الجانب البرمجة الموجهة (اوب). لقد فعلت ذلك أبدا نفسي، ولكن أسمع AspectJ هو ما تريد.

public interface SomeInterface {
    public void someMethod();
}

public MyClass implements SomeInterface {
...
}

// DebugProxy doesn't return your class, but a class which implements all of the interfaces
// you class implements
SomeInterface mc = (SomeInterface ) DebugProxy.newInstance(new MyClass(props));

وعندما تريد إنشاء وكيل، تحتاج إلى توفير واجهة لتنفيذ. ليس فئة محددة.

واجهات لا تصف الصانعين، لذلك ما تريد القيام به هو ليس ممكنا على الفور.

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