ใน C และ C++ คุณสามารถพิมพ์ชื่อฟังก์ชันปัจจุบันได้ดังนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
printf("%s",__func__);
แต่ไม่มีคำพูดดังกล่าวใน Java ทุกอย่างเป็นวัตถุและจะต้องได้รับจากวัตถุ มีสองวิธี:
อันแรก: รับมันผ่านคลาสเธรด
คัดลอกรหัสรหัสดังต่อไปนี้:
System.out.println(Thread.currentThread().getStackTrace()[1].getMethodName());
System.out.println(Thread.currentThread().getStackTrace()[1].getClassName());
วิธีที่สองได้มาจากคลาส Throwable วิธีที่สองสามารถขยายได้ และคลาสย่อยของ Throwable ก็สามารถรับรู้ฟังก์ชันได้
คัดลอกรหัสรหัสดังต่อไปนี้:
System.out.println(โยนใหม่ได้().getStackTrace()[0].getMethodName());
System.out.println(โยนใหม่().getStackTrace()[0].getClassName());
ด้วยสองวิธีนี้ คุณสามารถพิมพ์ชื่อวิธีการปัจจุบันและชื่อคลาสได้ แต่มีข้อเสียเปรียบ: ดัชนีต่อไปนี้:
คัดลอกรหัสรหัสดังต่อไปนี้:
getStackTrace()[ดัชนี]
ควรใช้ค่าใด 0 หรือ 1 หรือค่าอื่น ๆ ที่นี่ดัชนีของทั้งสองวิธีเขียนเป็น 0 และ 1 ตามลำดับเพียงเพื่อเตือนตัวเองว่ามันไม่ได้รับการแก้ไขและจำเป็นต้องกำหนดด้วยตัวเองผ่านการทดสอบ ว่ากันว่าค่าอาจแตกต่างกันไปขึ้นอยู่กับเวอร์ชัน JDK แต่ยังไม่ได้ทดสอบด้วยตัวเอง
เวอร์ชัน JDK ที่ฉันใช้ในการทดสอบ: เวอร์ชัน java "1.7.0_17"