على النحو التالي:
الكائن العام InvokeMethod (سلسلة className ، سلسلة methodname ، كائن [] args) يلقي الاستثناء {class ownerClass = class.forname (className) ؛ Object Offic = ownerClass.NewInstance () ؛ الفئة [] argsClass = فئة جديدة [args.length] ؛ لـ (int i = 0 ، j = args.length ؛ i <j ؛ i ++) {argsClass [i] = args [i] .getClass () ؛ } method method = ownerClass.getMethod (methodName ، argsClass) ؛ طريقة العودة. invoke (المالك ، args) ؛}ومع ذلك ، في تطبيقنا الفعلي ، سنواجه أيضًا موقفًا قد لا تكون فيه المعلمات الفعلية الواردة والمعلمات الرسمية للطريقة المراد استدعاؤها متسقة تمامًا:
على سبيل المثال ، عندما يتم استدعاء طريقة في Struts1.x ، سيكون لها معلمات من نوع httpservletresponse.
في tomcat ، يكون مثيل كائن الطلب هو في الواقع: org.apache.catalina.connector.Responsefacade
وهو ينفذ الواجهة: javax.servlet.http.httpservletresponse ؛
إذا تعاملنا مباشرة مع كائن الطلب في حاوية الويب كمعلمة ونقله إلى مقتطف الرمز أعلاه ، فستكون هناك مشكلة. في هذا الوقت ، طريقة التعامل مع هذا مثل هذا. في العمل ، فإن الطريقة تشبه بشكل عام:
استعلام العمل العام (تعيين العمل ، نموذج العمل ،
طلب httpservletrequest ، استجابة httpservletresponse)
تقع الاستجابة عمومًا في الرابع ، لذلك دعونا نعدل الكود أعلاه:
باقة
لـ (int i = 0 ، j = args.length ؛ i <j ؛ i ++) {argsClass [i] = args [i] .getClass () ؛ }التغيير إلى:
لـ (int i = 0 ، j = args.length ؛ i <j ؛ i ++) {if (i == 3) {argsClass [i] = httpservletresponse.class ؛ } آخر {argsClass [i] = args [i] .getClass () ؛ }}الملخص أعلاه (الموصى به) للاتصال ديناميكيًا بطريقة معينة من خلال آلية انعكاس Java هو كل المحتوى الذي أشاركه معك. آمل أن تتمكن من إعطائك مرجعًا وآمل أن تتمكن من دعم wulin.com أكثر.