JavaRush /จาวาบล็อก /Random-TH /คลาสที่ซ้อนกัน คลาสท้องถิ่น และไม่ระบุชื่อ
WhatNick
ระดับ

คลาสที่ซ้อนกัน คลาสท้องถิ่น และไม่ระบุชื่อ

เผยแพร่ในกลุ่ม
ขอให้เป็นวันที่ดีสำหรับทุกคน! ฉันเริ่มเจาะลึกลงไปในประเภทของคลาสและเขียนโค้ดที่มีคลาสนั้น คลาสนี้มีวิธีการmain()และคลาสที่ซ้อนกันแบบคงที่ คลาสที่ซ้อนกันแบบคงที่มีวิธีการ วิธีการสร้างคลาสท้องถิ่น ชั้นเรียนท้องถิ่นมีวิธีการที่สร้างคลาสที่ไม่เปิดเผยตัวตนของคลาสเฟรม (ฉันสงสัยอย่างยิ่งว่าการบิดเบือนดังกล่าวเกิดขึ้นในการฝึกเขียนโปรแกรม แต่เพื่อประโยชน์ด้านกีฬาล้วนๆ ฉันจึงตัดสินใจที่จะฉลาดดังนั้นโปรดอย่าขว้างก้อนหิน ก่อนเวลาแต่อย่างใด) ทำให้ง่ายขึ้นดูเหมือนว่านี้: คลาสที่ซ้อนกัน ท้องถิ่น และไม่ระบุชื่อ - 1

class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
        int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
            class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
                int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
                    new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
                }
            }
        }
    }
}
เป้าหมาย: สร้างตัวแปรในคลาสที่ไม่ระบุตัวตนโดยใช้เฟรมซูเปอร์คลาส และ "โยน" อาร์กิวเมนต์ของตัวแปรนี้ไปจนถึงคลาสภายใน โดยกำหนดให้กับตัวแปรคลาสภายในตามลำดับ ด้านล่างนี้เป็นโค้ดที่ขยายเล็กน้อยพร้อมภาพร่างของฉัน

class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
    int outerValue = 0;

    Outer(int a)
    {
        this.outerValue = a*a;
    }

    int getValue() {
        return outerValue;
    }

    static class Inner { // ВНУТРЕННИЙ СТАТИЧЕСКИЙ КЛАСС
        public  int innerValue = doInnerThings();

        int doInnerThings() {
            final int innerValue = 0; // КАК ПЕРЕДАТЬ ЗНАЧЕНИЕ ЭТОЙ ПЕРЕМЕННОЙ ИЗ КЛАССА НИЖЕ?

            class LocalInner { // ЛОКАЛЬНЫЙ КЛАСС
                final public int localInnerValue;

                LocalInner() {
                    localInnerValue = doLocalInnerThings();
                }

                int doLocalInnerThings() {
                    final int[] localInnerAnonValue = {0};

                    new Outer(5) { // АНОНИМНЫЙ КЛАСС
                        @Override
                        int getValue()
                        {
                            localInnerAnonValue[0] = super.getValue();
                            return localInnerAnonValue[0];
                        }
                    };
                    
                    return localInnerAnonValue[0];
                }

                int getlocalInnerValue() {
                    return this.localInnerValue;
                }
            }

            return innerValue;
        }
    }

    public static void main(String[] args) {
        Outer.Inner test = new Outer.Inner();
        System.out.println(test.innerValue);
    }
}
ปัญหา: วิธีที่int doInnerThings()ฉันไม่สามารถกำหนดinnerValueค่าของตัวแปรlocalInnerValue“ จากคลาสท้องถิ่น ไปยังตัวแปรของวิธีนี้ LocalInnerได้ ฉันยินดีที่จะช่วย! :)
ความคิดเห็น
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION