mam ten zakaz statyczną klasę wewnętrzną, która powoduje wycieki pamięci, ponieważ posiada pośrednie odniesienie do klasy okalającego:Obejście dostęp non-statycznej metody członek od statycznej klasy wewnętrznej
private class CalendarScheduleUpdatedEventListener extends ScheduleUpdatedEventListener.Stub {
@Override
public void onScheduleUpdatedEvent() throws RemoteException {
updateCalendar();
}
}
w celu zatrzymać go przed przeciekaniem, muszę zrobić to statyczna:
private static class CalendarScheduleUpdatedEventListener extends ScheduleUpdatedEventListener.Stub {
@Override
public void onScheduleUpdatedEvent() throws RemoteException {
updateCalendar();-> Compiler error - trying to access a non-static...
}
}
jest niemożliwe, aby updateCalendar()
statyczny, ponieważ mnie to dostęp do innych zmiennych non-statyczne i staje się bałagan. Co ja robię?
Czy jesteś właścicielem superklasę? – Terje
Nie do końca rozumiem, dlaczego to musi być statyczne. Jeśli chcesz wywołać metodę klasy otaczającej, mimo to potrzebujesz tego odwołania. Naprawdę nie widzę przecieku pamięci. –
Co rozumiesz przez to, co powoduje wycieki pamięci? Gdy wewnętrzna instancja klasy jest GCed, zewnętrzna instancja też będzie (Jeśli nie ma innych odniesień). A gdy wewnętrzna instancja pozostaje w stosie, zewnętrzna też musi pozostać (bo i tak nazywacie zewnętrzną metodą). – Codebender