ฉันจะเรียกใช้วิธีการคงที่แบบไดนามิก (กำหนดเป็นวัตถุ MetaMethod) ใน Groovy ได้อย่างไร

ตัวอย่างเช่น ลองใช้วิธีหนึ่งของ StringUtils:

def isEmptyMethod = StringUtils.metaClass.getMetaMethod("isEmpty", String)

เมื่อฉันมีวิธีนี้แล้ว ฉันสามารถเรียกใช้ได้ดังนี้:

isEmptyMethod.invoke(null, 'some string')

นี่เป็นวิธีที่เหมาะสมในการเรียกใช้เมตาวิธีการแบบคงที่หรือไม่ อาร์กิวเมนต์ null ดูเหมือนจะไม่ถูกต้อง แต่ฉันไม่พบวิธีที่ "สะอาดกว่า" ในการทำเช่นนี้

แก้ไข: ฉันเห็นว่านี่เป็นหนึ่งในคำตอบสำหรับคำถามที่ cfrick likned แต่ฉันยังไม่มั่นใจเกี่ยวกับพารามิเตอร์ 'null' ...


person CptBartender    schedule 21.10.2014    source แหล่งที่มา
comment
เป็นไปได้ที่ซ้ำกันของ ใน groovy คุณจะเรียกเมธอดสแตติกของคลาสแบบไดนามิกได้อย่างไร   -  person cfrick    schedule 21.10.2014
comment
MetaMethod.invoke(Object object, Object[] arguments) ต้องการวัตถุ/ผู้รับมอบสิทธิ์/สิ่งนี้ ดังนั้นหากไม่มี ให้ผ่าน null   -  person cfrick    schedule 21.10.2014


คำตอบ (1)


วิธีสั้น:

StringUtils."isEmpty"('some string')

MetaMethod วิธี:

def isEmptyMethod = StringUtils.metaClass.getMetaMethod("isEmpty", String)
isEmpty.invoke(null, '')
person topr    schedule 21.10.2014