Groovy / grails วิธีตรวจสอบชนิดข้อมูล?


176

เป็นวิธีที่ดีที่สุดในการกำหนดประเภทข้อมูลใน Groovy อะไร

ฉันต้องการจัดรูปแบบผลลัพธ์แตกต่างกันหากเป็นวันที่เป็นต้น

คำตอบ:


244

ในการกำหนดคลาสของวัตถุให้เรียก:

someObject.getClass()

คุณสามารถย่อได้someObject.classในกรณีส่วนใหญ่ อย่างไรก็ตามหากคุณใช้ตัวเลือกนี้Mapจะพยายามเรียกคืนค่าด้วยคีย์ 'class' ด้วยเหตุนี้ฉันมักจะใช้getClass()แม้ว่ามันจะนานกว่าเล็กน้อย

หากคุณต้องการตรวจสอบว่าวัตถุใช้อินเทอร์เฟซเฉพาะหรือขยายการใช้คลาสเฉพาะ (เช่นวันที่):

(somObject instanceof Date)

หรือตรวจสอบว่าระดับของวัตถุคือว่าชั้นเฉพาะ (ไม่ subclass ของมัน) ใช้งาน:

(somObject.getClass() == Date)

2
instanceofเหมาะสำหรับการกรองตามส่วนต่อประสาน
cdeszaq

อย่างน้อยใน Groovy ล่าสุด (2.3.7) เรายังสามารถเขียนบางอย่าง Object.lass
loloof64

5
@LaurentBERNABE ที่ทำงานในกรณีส่วนใหญ่ แต่ไม่ได้ในทุกที่เช่นMapอินสแตนซ์
Dónal

คุณพูดถูก: เราได้รับโมฆะในกรณีนี้ ขออภัยในความผิดพลาด
loloof64

แล้วนี่คืออะไร? def test = {} println test.getClass() คลาส Script1 $ _run_closure1 ??
Petrunov

33

วิธี groovy ง่าย ๆ ในการตรวจสอบประเภทของวัตถุ:

somObject in Date

สามารถใช้ได้กับอินเตอร์เฟส


3

เพียงเพิ่มตัวเลือกอื่นในคำตอบของDónalคุณยังสามารถใช้java.lang.Object.getClass()วิธีการเดิมที่ดีได้



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.