ใช่ เราสามารถเข้าถึง ตัวแปรสุดท้ายในเครื่อง โดยใช้ เมธอด local inner class เพราะตัวแปรสุดท้ายจะถูกเก็บไว้ใน ฮีป และดำรงอยู่ตราบเท่าวิธีการชั้นในของท้องถิ่น วัตถุอาจมีชีวิต
วิธีการระดับชั้นในภายใน
- A อินสแตนซ์คลาสภายในภายในเครื่อง สามารถส่งเป็นอาร์กิวเมนต์และดึงข้อมูลจากเมธอดและสามารถใช้ได้ภายในขอบเขตที่ถูกต้อง
- ข้อจำกัดเดียวใน method local inner class คือพารามิเตอร์ท้องถิ่นสามารถดำเนินการได้ก็ต่อเมื่อถูกกำหนดเป็น สุดท้าย .
- เมธอดที่เรียกใช้พารามิเตอร์ในเครื่องสามารถเรียกได้หลังการดำเนินการของเมธอด ซึ่ง คลาสภายในภายในเครื่อง ถูกประกาศ ด้วยเหตุนี้ พารามิเตอร์ในเครื่องจะไม่เก็บค่าไว้อีกต่อไป
- ค่าจะต้องได้รับการแก้ไขก่อนที่จะสร้างอ็อบเจ็กต์คลาสภายในภายในเครื่อง หากจำเป็น ตัวแปรที่ไม่ใช่ตัวแปรสุดท้ายสามารถคัดลอกไปยังตัวแปรสุดท้ายได้ ซึ่งจะถูกดำเนินการในภายหลังโดย คลาสภายในภายในเครื่อง .
ตัวอย่าง
class MainClassTest { private int x = 10; public void sampleMethod() { final int y = 20; class MethodLocalInnerClassTest { public void accessMainClassVar() { System.out.println(x); // accessing the final variable System.out.println(c); } } MainClassTest mainTest = new MethodLocalInnerClassTest(); mainTest.accessMainClassVar(); } } // Test.java public class Test { public static void main(String args[]) { MainClassTest test = new MainClassTest(); test.sampleMethod(); } }
ผลลัพธ์
10 20