Wpis z mikrobloga

#java #programowanie #ciekawostkigrizwolda

Modyfikatory dostępu w Javie są proste:

private
- poza klasą nie mamy dostepu (oprócz klas wewnetrznych itp)

protected
- tak jak

private
+ klasy dziedziczące po danej klasie

brak modyfikatora - zasięg pakietowy

public
- publiczny dostęp

Czyli oznaczymy sobie nasze metody i zmienne jako

private
i już nikt do nich nie będzie miał dostepu :)


Przedstawiam Wam pakiet

java.lang.reflect
szerzej znany jako Java Reflection API

Mamy sobie taką klasę:

http://i.imgur.com/QTTMUVz.jpg


Po zainicjalizowaniu klasy przez

Foo foo = new Foo(666)
juz nie zmienimy wartosci zwracanej przez foo.getBar() z 666 na coś innego.

Jednak za pomocą refleksji możemy to zrobić:

http://i.imgur.com/YPJVsr9.jpg

TADAAA!

Polecam przyjrzeć się bliżej refleksji - niedługo będzie nam potrzeba ;)
  • 16
  • Odpowiedz
  • Otrzymuj powiadomienia
    o nowych komentarzach

@Jonarz: Nie stosuj tego na początku nauki :) przedstawiam dzisiaj sposoby na psucie Javy. Refleksji uzywają rozbudowane frameworki takie jak Spring, Hibernate jak i wiele różnych bibliotek Gson, JAX-WS itp.

Co tu się wydarzyło?


Zmienilismy modyfikator dostepu do pola klasy i zmieniliśmy wartość danego pola w jednym z obiektów klasy Foo.
  • Odpowiedz
Zmienilismy modyfikator dostepu do pola klasy


@Grizwold: to akurat nie jest prawdą co bardzo łatwo można sprawdzić metodą barNumber.getModifiers() przed i po zmianie flagi dostępu do tego konkretnego pola.
  • Odpowiedz
@Grizwold: warto przy okazji dodać, że prywatność w Javie dotyczy klas, a nie instancji. To oznacza że dowolna instancja klasy

Foo
ma dostęp do pól prywatnych każdej innej instancji

Foo
.
  • Odpowiedz