Okazuje się, że Twórcy Java'y wpadli na pomysł tego by klasa dostarczała informacji o tym jak często jej zawartość była updatowana ;-)
Gdzie updatowanie oznacza zamianę kodu, albo pól (to w razie używania DCEVMa ;-)).
Żeby odczytać liczbę razy ile nasza klasa została zmieniona wystarczy użyć tej metody (za DCEVMem):
public static int getClassRedefinedCount(Class type) {
try {
Field field = Class.class.getDeclaredField("classRedefinedCount");
boolean accessibility = field.isAccessible();
field.setAccessible(true);
int classRedefinedCount = (Integer) field.get(type);
field.setAccessible(accessibility);
return classRedefinedCount;
} catch (Exception e) {
throw new RuntimeException(e);
}
}
Dzięki zawołaniu tej metody z naszym typem poznamy liczbę redefinicji naszej klasy ;-)
Metoda jak łatwo zobaczyć poprzez refleksje dociera do pola classRedefinedCount w Class i odczytuje jego wartość z instancji, którą jest nasz typ ;-) [rzadko się używa Class jako instancji ;-)]
Po co to komu?
Można by np. dodać kawałek do aplikacji, który skanuje wszystkie klasy i stwierdza czy np. ktoś apki nie debuguje i nie zmienia w locie ;-)
I jak na razie to jedyne zastosowanie na jakie wpadłem :-)
Ale mój pierwszy coś zrobiony w C++ już istnieje :-)
Podobne postybeta
Dodawanie i usuwanie metod i pól z klas Java w locie ;-)
PROPFIND, czyli jak przechytrzyć HttpURLConnection
Niecne wykorzystanie refleksji... czyli jak poszukać tekstu w drzewie obiektów? ;-)
Sztuczki tropiciela błędów, part 4
Ile to jest 1+1 w Java'ie?
Brak komentarzy:
Prześlij komentarz