MethodHandles เพิ่มมาตั้งแต่ Java 7 ปรับปรุงใน Java 9 เพิ่ม static methods ใหม่: arrayLength(), arrayConstructor(), zero() เป็นต้น
หมวดหมู่เมธอด
- Lookup methods - สร้าง method handles สำหรับเมธอด/ฟิลด์
- Combinator methods - รวม/แปลง method handles
- Factory methods - สร้าง method handles เลียนแบบ JVM operations
ตัวอย่างใช้งานเมธอดใหม่ Java 9
import java.lang.invoke.MethodHandle;
import java.lang.invoke.MethodHandles;
public class MethodHandlesDemo {
public static void main(String[] args) throws Throwable {
// arrayLength - ดึงความยาว array
MethodHandle mhLen = MethodHandles.arrayLength(int[].class);
int[] arr = {5, 10, 15, 20};
int len = (int) mhLen.invoke(arr);
System.out.println("Array length: " + len); // 4
// arrayConstructor - สร้าง array ใหม่
MethodHandle mhCon = MethodHandles.arrayConstructor(int[].class);
int[] newArr = (int[]) mhCon.invoke(3);
System.out.println("New array size: " + newArr.length); // 3
// zero - ค่า default ของ primitive/reference
int defInt = (int) MethodHandles.zero(int.class).invoke();
String defStr = (String) MethodHandles.zero(String.class).invoke();
System.out.println("Default int: " + defInt); // 0
System.out.println("Default String: " + defStr); // null
}
}
ผลลัพธ์
Array length: 4 New array size: 3 Default int: 0 Default String: null