2012-09-06 10 views
5

में मेरी समझ यह है कि ..0-Many तर्क और *any नाम का एक तर्क है। क्या ये सही है?क्या करें .. और * पहलू

क्या पहलू समर्थन वाक्यविन्यास args(..,myArg,..) जैसा है?

+0

var-arg केवल जावा में अंतिम तर्क (अंत में) हो सकता है। – Shark

+0

कंपाइलर/दुभाषिया के लिए यह जानना बहुत मुश्किल/असंभव होगा कि आपके मामले में कौन सा तर्क पारित किया गया था वास्तव में 'myArg' था। – climbage

उत्तर

7

यह AspectJ साइट से है: "।" http://www.eclipse.org/aspectj/doc/next/progguide/semantics-pointcuts.html

* छोड़कर वर्णों की संख्या का प्रतिनिधित्व करता है

.. किसी भी संख्या में "।" सहित वर्णों की किसी भी संख्या का प्रतिनिधित्व करता है।

अद्यतन कार्रवाई में AspectJ से - विधि हस्ताक्षर के लिए:

विधि हस्ताक्षर में, वाइल्डकार्ड .. एक विधि द्वारा उठाए गए तर्कों की किसी भी प्रकार और संख्या निरूपित किया जाता है

* एक एकल तर्क निर्दिष्ट करता है

+0

लेकिन यह भी: "यदि यह" * "वाइल्डकार्ड है, तो कोई भी तर्क मेल खाता है, और यदि यह विशेष वाइल्डकार्ड" .. "है, तो किसी भी संख्या में तर्क" – MikePatel

+0

से मेल खाते हैं हां, आप सही हैं, मेरे पास है विधि हस्ताक्षर के लिए जवाब के अनुसार भी अद्यतन किया। AspectJ '(.., myarg, ..) का समर्थन नहीं करता है, हालांकि, यह सुनिश्चित नहीं है कि क्यों। –

4

अन्य ने मेरे सामने इस प्रश्न का उत्तर दिया है, इसलिए मैं केवल संशोधन करूंगा:

.., bla, .. काम नहीं करता है क्योंकि यदि आप चरम पर पैरामीटर bla बाध्य करते हैं तो पैरामीटर सूची में मिलान प्रकार कई बार होता है, तो कई मिलान संयोजन हो सकते हैं। उदाहरण:

before(String bla) : call(void foo(.., bla, ..)) && args(bla)

blab या c की String मूल्य के लिए बाध्य किया जाना चाहिए:

void foo(int a, String b, String c, File d)

अब अगर सलाह है कि क्या होने चाहिए?

संबंधित मुद्दे