Dzień dobry wszystkim! Zacząłem głębiej zagłębiać się w typy klas i napisałem kod zawierający daną klasę. Ta klasa zawiera metodę
main()
i statyczną klasę zagnieżdżoną. Statyczna klasa zagnieżdżona zawiera metodę. Metoda tworzy klasę lokalną. Klasa lokalna ma metodę, która tworzy anonimową klasę klasy framingu (mocno wątpię, aby w praktyce programistycznej zdarzały się takie wypaczenia, ale w imię czysto sportowych zainteresowań zdecydowałem się zachować spryt, więc proszę nie rzucać kamieniami. W każdym razie przed czasem). W uproszczeniu wygląda to tak:
class Outer { // ОБРАМЛЯЮЩИЙ КЛАСС
static class Inner { // СТАТИЧЕСКИЙ ВЛОЖЕННЫЙ КЛАСС
int doInnerThings() { // ЛОКАЛЬНЫЙ МЕТОД ВНУТРЕННЕГО КЛАССА
class LocalInner { // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ КЛАСС
int doLocalInnerThings() { // МЕТОД ЛОКАЛЬНОГО КЛАССА
new Outer(5) {}; // ВНУТРЕННИЙ ЛОКАЛЬНЫЙ АНОНИМНЫЙ КЛАСС
}
}
}
}
}
Cel: utwórz zmienną w anonimowej klasie, używając superklasy ramującej i „wrzuć” argument tej zmiennej aż do klasy wewnętrznej, przypisując go odpowiednio do zmiennej klasy wewnętrznej. Poniżej nieco rozszerzony kod z moimi szkicami.
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);
}
}
Problem: metoda int doInnerThings()
Nie mogę przypisać innerValue
wartości zmiennej localInnerValue
„z klasy lokalnej do zmiennej tej metody LocalInner
. Chętnie pomogę! :)
GO TO FULL VERSION