hari yang baik untuk semua! Saya mula menggali lebih dalam jenis kelas dan menulis kod yang mengandungi kelas. Kelas ini mengandungi kaedah
main()
dan kelas bersarang statik. Kelas bersarang statik mengandungi kaedah. Kaedah ini mencipta kelas tempatan. Kelas tempatan mempunyai kaedah yang mencipta kelas tanpa nama kelas pembingkaian (saya amat meragui bahawa penyelewengan sedemikian berlaku dalam amalan pengaturcaraan, tetapi demi kepentingan sukan semata-mata saya memutuskan untuk menjadi bijak, jadi tolong jangan buang batu. Sebelum masa, dalam apa jua keadaan). Dipermudahkan ia kelihatan seperti ini:
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
}
}
}
}
}
Matlamat: cipta pembolehubah dalam kelas tanpa nama menggunakan kelas super pembingkaian dan "buang" hujah pembolehubah ini sehingga ke kelas dalam, masing-masing memberikannya kepada pembolehubah kelas dalam. Di bawah ialah kod yang sedikit dikembangkan, dengan lakaran saya.
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);
}
}
Masalah: kaedah int doInnerThings()
saya tidak boleh menetapkan innerValue
nilai pembolehubah localInnerValue
" daripada kelas tempatan kepada pembolehubah kaedah ini LocalInner
. Saya berbesar hati untuk membantu! :)
GO TO FULL VERSION