net.ranides.assira.reflection
Class ClassInspector

java.lang.Object
  extended by net.ranides.assira.reflection.ClassInspector

public final class ClassInspector
extends Object

Author:
ranides

Method Summary
static Class<?> box(Class<?> clazz)
          Zamienia typ prymitywny na odpowiadający mu wrapper, np int zamienia na Integer.
static Method findDeclaredMethod(Class<?> clazz, String name)
          Zwraca zadeklarowaną metodę o podanej nazwie bez względu na pobierane argumenty
static Method findDeepMethod(Class<?> clazz, String name)
          Zwraca zadeklarowaną metodę o podanej nazwie bez względu na pobierane argumenty.
static Method findMethod(Class<?> clazz, String name)
          Zwraca publiczną metodę o podanej nazwie bez względu na pobierane argumenty.
static Class<?> forName(String className)
          Próbuje utworzyć klasę o podanej nazwie za pomocą ClassLoadera powiązanego z bieżącym wątkiem.
static List<Class<?>> getAncestors(Class<?> clazz)
          Zwraca listę wszystkich klas w łańcuchu dziedziczenia.
static
<T> List<Class<?>>
getAncestors(Class<T> clazz, Class<? super T> root)
          Zwraca listę wszystkich klas w łańcuchu dziedziczenia.
static
<T> List<Class<?>>
getAncestors(T object)
          Zwraca listę wszystkich klas w łańcuchu dziedziczenia.
static
<T> List<Class<?>>
getAncestors(T object, Class<? super T> root)
          Zwraca listę wszystkich klas w łańcuchu dziedziczenia.
static
<T> Iterable<Class<?>>
getAncestorTree(Class<T> clazz)
          Zwraca wszystkie klasy w łańcuchu dziedziczenia oraz wszystkie zaimplementowane interfejsy.
static Class<?> getClass(Object value)
           
static Class<?>[] getClass(Object[] values)
          Grupowa wersja funkcji Class.getClass.
static
<T> Constructor<T>
getConstructor(Class<T> clazz, Class... args)
          Zwraca dowolny (niekoniecznie publiczny) konstruktor o dokładnie pasujących typach argumentów
static
<T> Constructor<T>
getConstructor(Class<T> clazz, int count)
          Zwraca dowolny (niekoniecznie publiczny) konstruktor o pobierający wskazaną liczbę argumentów.
static Method getDeclaredMethod(Class<?> clazz, String name, Class<?>... params)
          Zwraca zadeklarowaną metodę o dokładnie pasujących typach argumentów
static Method getDeclaredMethod(Class<?> clazz, String name, int count)
          Zwraca zadeklarowaną metodę o podanej nazwie, pobierającą wskazaną ilość argumentów.
static Method getDeepMethod(Class<?> clazz, String name, int count)
          Zwraca zadeklarowaną metodę o podanej nazwie, która pobiera podaną ilość argumentów.
static Method[] getDeepMethods(Class<?> clazz)
          Zwraca wszystkie metody zadeklarowane i/lub odziedziczone przez klasę, łącznie z chronionymi i prywatnymi.
static String getFQLocation(Class<?> clazz)
          Zwraca ścieżkę do pliku .class, z którego została załadowana klasa.
static String getLocation(Class<?> clazz)
          Zwraca lokalizację, w której został wyszukany odpowiedni plik .class z definicją załadowanej klasy.
static Method getMethod(Class<?> clazz, String name, Class<?>... params)
          Zwraca publiczną metodę o dokładnie pasujących typach argumentów
static Method getMethod(Class<?> clazz, String name, int count)
          Zwraca publiczną metodę o podanej nazwie, pobierającą określoną ilość argumentów.
static Object getStaticField(Class<?> clazz, String name)
          Wyszukuje i odczytuje wartość klasycznego pola statycznego w obiekcie (najczęściej będzie to publiczna stała).
static
<T> boolean
hasConstructor(Class<T> clazz, Class... args)
          Sprawdza, czy klasa posiada (niekoniecznie publiczny) konstruktor o dokładnie pasujących typach argumentów
static
<T> boolean
hasConstructor(Class<T> clazz, int count)
          Sprawdza, czy klasa posiada (niekoniecznie publiczny) konstruktor pobierający wskazaną liczbę argumentów
static boolean hasDeclaredMethod(Class<?> clazz, String name, Class<?>... params)
          Sprawdza, czy klasa posiada zadeklarowaną metodę o dokładnie pasujących typach argumentów
static boolean hasDeclaredMethod(Class<?> clazz, String name, int count)
          Sprawdza, czy obiekt posiada zadeklarowaną metodę odpowiedniej ilości argumentów
static boolean hasMethod(Class<?> clazz, String name, Class<?>... params)
          Sprawdza, czy obiekt posiada publiczną metodę o dokładnie pasujących typach argumentów
static boolean hasMethod(Class<?> clazz, String name, int count)
          Sprawdza, czy obiekt posiada publiczną metodę odpowiedniej ilości argumentów
static boolean isAssignableFrom(Class<?>[] supers, Class<?>[] values)
          Grupowa wersja funkcji Class.isAssignableFrom - sprawdza, czy odpowiednie elementy z tablicy supers są assignable względem odpowiednich elementów values, czyli czy
for(i) supers[i].isAssignableFrom( values[i] ) Uwzględnia autoboxing argumentów.
static boolean isAssignableFrom(Class<?> ssuper, Class<?> value)
          Rozszerzenie standardowej metody Class.isAssignableFrom.
static boolean isBool(Class<?> clazz)
          Sprawdza, czy podana klasa reprezentuje typ logiczny - bez względu na to, czy przekazana klasa reprezentuje typ prymitywny (boolean), czy wrapper (np Boolean).
static boolean isBoxed(Class<?> clazz)
          Sprawdza, czy podana klasa reprezentuje opakowany typ prymitywny (np Integer).
static boolean isInstance(Class<?>[] supers, Object[] values)
          Sprawdza, czy odpowiednie obiekty z tablicy values są istancjami odpowiednich klas z tablicy supers.
static boolean isInstance(Class<?> ssuper, Object value)
          Sprawdza, czy podany obiekt value jest instancją klasy ssuper.
static boolean isNumber(Class<?> clazz)
          Sprawdza, czy podana klasa reprezentuje typ numeryczny - bez względu na to, czy przekazana klasa reprezentuje typ prymitywny (np float), czy wrapper (np Double), czy Number.
static boolean isPrimitive(Class<?> clazz)
          Sprawdza, czy podana klasa reprezentuje nieopakowany typ prymitywny (np int).
static
<T> Constructor<T>
matchConstructor(Class<T> clazz, Object... values)
          Zwraca konstruktor o najlepiej pasujących typach argumentów.
static Method matchMethod(Class<?> clazz, String name, Object... values)
          Zwraca metodę o najlepiej pasujących typach argumentów.
static void setStaticField(Class<?> clazz, String name, Object value)
          Wyszukuje i zmienia wartość klasycznego pola statycznego w obiekcie (najczęściej będzie to w pewnym sensie operacja niedozwolona ).
static Class<?> unbox(Class<?> clazz)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

forName

public static Class<?> forName(String className)
                        throws InspectException
Próbuje utworzyć klasę o podanej nazwie za pomocą ClassLoadera powiązanego z bieżącym wątkiem.

Parameters:
className -
Returns:
Throws:
InspectException
SecurityException

box

public static Class<?> box(Class<?> clazz)
Zamienia typ prymitywny na odpowiadający mu wrapper, np int zamienia na Integer. W pozostałych przypadkach po prostu zwraca przekazany argument bez żadnych zmian. W szczególności metoda może być bezpiecznie wywoływana na rzecz wrapperów:
box(box(int.class));

Parameters:
clazz -
Returns:

unbox

public static Class<?> unbox(Class<?> clazz)

isPrimitive

public static boolean isPrimitive(Class<?> clazz)
Sprawdza, czy podana klasa reprezentuje nieopakowany typ prymitywny (np int).

Parameters:
clazz -
Returns:

isBoxed

public static boolean isBoxed(Class<?> clazz)
Sprawdza, czy podana klasa reprezentuje opakowany typ prymitywny (np Integer).

Parameters:
clazz -
Returns:

isBool

public static boolean isBool(Class<?> clazz)
Sprawdza, czy podana klasa reprezentuje typ logiczny - bez względu na to, czy przekazana klasa reprezentuje typ prymitywny (boolean), czy wrapper (np Boolean).

Parameters:
clazz -
Returns:

isNumber

public static boolean isNumber(Class<?> clazz)
Sprawdza, czy podana klasa reprezentuje typ numeryczny - bez względu na to, czy przekazana klasa reprezentuje typ prymitywny (np float), czy wrapper (np Double), czy Number.

Parameters:
clazz -
Returns:

isAssignableFrom

public static boolean isAssignableFrom(Class<?> ssuper,
                                       Class<?> value)
Rozszerzenie standardowej metody Class.isAssignableFrom. Uwzględnia autoboxing argumentów.

Parameters:
ssuper -
value -
Returns:

isAssignableFrom

public static boolean isAssignableFrom(Class<?>[] supers,
                                       Class<?>[] values)
Grupowa wersja funkcji Class.isAssignableFrom - sprawdza, czy odpowiednie elementy z tablicy supers są assignable względem odpowiednich elementów values, czyli czy
for(i) supers[i].isAssignableFrom( values[i] ) Uwzględnia autoboxing argumentów.

Parameters:
supers -
values -
Returns:

isInstance

public static boolean isInstance(Class<?> ssuper,
                                 Object value)
Sprawdza, czy podany obiekt value jest instancją klasy ssuper. Uwzględnia autoboxing argumentów.

Parameters:
ssuper -
value -
Returns:

isInstance

public static boolean isInstance(Class<?>[] supers,
                                 Object[] values)
Sprawdza, czy odpowiednie obiekty z tablicy values są istancjami odpowiednich klas z tablicy supers. Uwzględnia autoboxing argumentów.

Parameters:
supers -
values -
Returns:

getClass

public static Class<?> getClass(Object value)

getClass

public static Class<?>[] getClass(Object[] values)
Grupowa wersja funkcji Class.getClass. Konwertuje tablicę obiektów na tablicę klas tych obiektów

Type Parameters:
T -
Parameters:
values -
Returns:

getDeepMethods

public static Method[] getDeepMethods(Class<?> clazz)
Zwraca wszystkie metody zadeklarowane i/lub odziedziczone przez klasę, łącznie z chronionymi i prywatnymi. Jeśli jakaś metoda jest override'wana, to jest zwracana wersja najbardziej "oryginalna".

Parameters:
clazz -
Returns:

findDeepMethod

public static Method findDeepMethod(Class<?> clazz,
                                    String name)
Zwraca zadeklarowaną metodę o podanej nazwie bez względu na pobierane argumenty. Metoda może być zadeklarowana przez dowolną klasę w hierarchii dziedziczenia.

Parameters:
clazz -
name -
Returns:

getDeepMethod

public static Method getDeepMethod(Class<?> clazz,
                                   String name,
                                   int count)
Zwraca zadeklarowaną metodę o podanej nazwie, która pobiera podaną ilość argumentów. Metoda może być zadeklarowana przez dowolną klasę w hierarchii dziedziczenia. Jeśli obiekt posiada więcej niż jedną metodę o podanej nazwie, spełniającą warunek, rzucany jest wyjątek.

Parameters:
clazz -
name -
count -
Returns:

getMethod

public static Method getMethod(Class<?> clazz,
                               String name,
                               Class<?>... params)
                        throws InspectException
Zwraca publiczną metodę o dokładnie pasujących typach argumentów

Parameters:
clazz -
name -
params - typy argumentów zadeklarowane identycznie jak w metodzie
Returns:
Throws:
InspectException

getMethod

public static Method getMethod(Class<?> clazz,
                               String name,
                               int count)
Zwraca publiczną metodę o podanej nazwie, pobierającą określoną ilość argumentów.

Parameters:
clazz -
name -
count -
Returns:

findMethod

public static Method findMethod(Class<?> clazz,
                                String name)
Zwraca publiczną metodę o podanej nazwie bez względu na pobierane argumenty. Metoda może być zadeklarowana przez dowolną klasę w hierarchii dziedziczenia.

Parameters:
clazz -
name -
Returns:

getDeclaredMethod

public static Method getDeclaredMethod(Class<?> clazz,
                                       String name,
                                       Class<?>... params)
                                throws InspectException
Zwraca zadeklarowaną metodę o dokładnie pasujących typach argumentów

Parameters:
clazz -
name -
params - typy argumentów zadeklarowane identycznie jak w metodzie
Returns:
Throws:
InspectException

getDeclaredMethod

public static Method getDeclaredMethod(Class<?> clazz,
                                       String name,
                                       int count)
Zwraca zadeklarowaną metodę o podanej nazwie, pobierającą wskazaną ilość argumentów.

Parameters:
clazz -
name -
count -
Returns:

findDeclaredMethod

public static Method findDeclaredMethod(Class<?> clazz,
                                        String name)
Zwraca zadeklarowaną metodę o podanej nazwie bez względu na pobierane argumenty

Parameters:
clazz -
name -
Returns:

hasMethod

public static boolean hasMethod(Class<?> clazz,
                                String name,
                                Class<?>... params)
Sprawdza, czy obiekt posiada publiczną metodę o dokładnie pasujących typach argumentów

Parameters:
clazz -
name -
params - typy argumentów zadeklarowane identycznie jak w metodzie
Returns:

hasMethod

public static boolean hasMethod(Class<?> clazz,
                                String name,
                                int count)
Sprawdza, czy obiekt posiada publiczną metodę odpowiedniej ilości argumentów

Parameters:
clazz -
name -
count -
Returns:

hasDeclaredMethod

public static boolean hasDeclaredMethod(Class<?> clazz,
                                        String name,
                                        Class<?>... params)
Sprawdza, czy klasa posiada zadeklarowaną metodę o dokładnie pasujących typach argumentów

Parameters:
clazz -
name -
params - typy argumentów zadeklarowane identycznie jak w metodzie
Returns:

hasDeclaredMethod

public static boolean hasDeclaredMethod(Class<?> clazz,
                                        String name,
                                        int count)
Sprawdza, czy obiekt posiada zadeklarowaną metodę odpowiedniej ilości argumentów

Parameters:
clazz -
name -
count -
Returns:

matchMethod

public static Method matchMethod(Class<?> clazz,
                                 String name,
                                 Object... values)
                          throws InspectException
Zwraca metodę o najlepiej pasujących typach argumentów. Nie muszą to być typy identyczne. Semantyka dopasowania w zamierzeniu identyczna do Javy. W chwili obecnej stwierdzone zostały następujące odstępstwa:

Ponieważ na argumentcie values wymuszany jest autoboxing, niektóre wywołania sa niejednoznaczne. W szczególności deklaracje rodzaju:

  class A{
      void method(int a);
      void method(Integer a);
  }
  matchMethod(A.class, "method", 1);
  matchMethod(A.class, "method", Integer.valueOf(2) );
 
W pierwszej instrukcji programista powinien oczekiwać wersji int, w drugiej: Integer. Niestety, funkcja matchMethod dostaje w obu przypadkach wartość już z'autoboxowaną: Integer - więc nie jest w stanie tych wywołań odróżniać. W obu liniach zostanie wyrzucony wyjątek - aby uruchomić kod, programista powinien usunąć jedną z metod.

Parameters:
clazz -
name -
values -
Returns:
Throws:
InspectException - jeśli nie znaleziono pasującej metody lub wystąpiła niejednoznaczność

getConstructor

public static <T> Constructor<T> getConstructor(Class<T> clazz,
                                                Class... args)
                                     throws InspectException
Zwraca dowolny (niekoniecznie publiczny) konstruktor o dokładnie pasujących typach argumentów

Type Parameters:
T -
Parameters:
clazz -
args -
Returns:
Throws:
InspectException

getConstructor

public static <T> Constructor<T> getConstructor(Class<T> clazz,
                                                int count)
                                     throws InspectException
Zwraca dowolny (niekoniecznie publiczny) konstruktor o pobierający wskazaną liczbę argumentów.

Type Parameters:
T -
Parameters:
clazz -
count -
Returns:
Throws:
InspectException

hasConstructor

public static <T> boolean hasConstructor(Class<T> clazz,
                                         Class... args)
                              throws InspectException
Sprawdza, czy klasa posiada (niekoniecznie publiczny) konstruktor o dokładnie pasujących typach argumentów

Type Parameters:
T -
Parameters:
clazz -
args -
Returns:
Throws:
InspectException

hasConstructor

public static <T> boolean hasConstructor(Class<T> clazz,
                                         int count)
                              throws InspectException
Sprawdza, czy klasa posiada (niekoniecznie publiczny) konstruktor pobierający wskazaną liczbę argumentów

Type Parameters:
T -
Parameters:
clazz -
count -
Returns:
Throws:
InspectException

matchConstructor

public static <T> Constructor<T> matchConstructor(Class<T> clazz,
                                                  Object... values)
                                       throws InspectException
Zwraca konstruktor o najlepiej pasujących typach argumentów. Nie muszą to być typy identyczne. Semantyka dopasowania w zamierzeniu identyczna do Javy (jakkolwiek odstępstwa istnieją, zobacz opis ObjectInspector.matchMethod(java.lang.Object, java.lang.String, java.lang.Object...) )

Type Parameters:
T -
Parameters:
clazz -
values -
Returns:
Throws:
InspectException

getStaticField

public static Object getStaticField(Class<?> clazz,
                                    String name)
                             throws InspectException
Wyszukuje i odczytuje wartość klasycznego pola statycznego w obiekcie (najczęściej będzie to publiczna stała). Wyszukuje i próbuje uzyskać dostęp również do pól prywatnych lub chronionych.

Parameters:
clazz -
name -
Returns:
Throws:
InspectException

setStaticField

public static void setStaticField(Class<?> clazz,
                                  String name,
                                  Object value)
                           throws InspectException
Wyszukuje i zmienia wartość klasycznego pola statycznego w obiekcie (najczęściej będzie to w pewnym sensie operacja niedozwolona ). Wyszukuje i próbuje uzyskać dostęp również do pól prywatnych lub chronionych.

Parameters:
clazz -
name -
value -
Throws:
InspectException

getLocation

public static String getLocation(Class<?> clazz)
Zwraca lokalizację, w której został wyszukany odpowiedni plik .class z definicją załadowanej klasy. Lokalizacja nie wskazuje na konkretny plik .class, aby uzyskać pełną ścieżkę, należy uzyć metody getFQLocation(java.lang.Class)

Parameters:
clazz -
Returns:

getFQLocation

public static String getFQLocation(Class<?> clazz)
Zwraca ścieżkę do pliku .class, z którego została załadowana klasa. Aby uzyskać lokalizację, w której rozpoczęto wyszukiwanie pliku .class, należy użyć metody getLocation(java.lang.Class)

Parameters:
clazz -
Returns:

getAncestors

public static <T> List<Class<?>> getAncestors(T object)
Zwraca listę wszystkich klas w łańcuchu dziedziczenia. Pierwszy element listy to klasa obiektu przekazanego jako argument. Następny element to jej rodzic. I tak dalej - aż do napotkania na klasę Object, która jest ostatnim elementem listy.

Type Parameters:
T -
Parameters:
object -
Returns:

getAncestors

public static <T> List<Class<?>> getAncestors(T object,
                                              Class<? super T> root)
Zwraca listę wszystkich klas w łańcuchu dziedziczenia. Pierwszy element listy to klasa obiektu przekazanego jako argument. Następny element to jej rodzic. I tak dalej - aż do napotkania na klasę root, która jest ostatnim elementem listy.

Type Parameters:
T -
Parameters:
object -
root -
Returns:

getAncestors

public static List<Class<?>> getAncestors(Class<?> clazz)
Zwraca listę wszystkich klas w łańcuchu dziedziczenia. Pierwszy element listy to klasa przekazana jako argument. Następny element to jej rodzic. I tak dalej - aż do napotkania na klasę Object, która jest ostatnim elementem listy.

Parameters:
clazz -
Returns:

getAncestors

public static <T> List<Class<?>> getAncestors(Class<T> clazz,
                                              Class<? super T> root)
Zwraca listę wszystkich klas w łańcuchu dziedziczenia. Pierwszy element listy to klasa przekazana jako argument. Następny element to jej rodzic. I tak dalej - aż do napotkania na klasę root, która jest ostatnim elementem listy.

Type Parameters:
T -
Parameters:
clazz -
root -
Returns:

getAncestorTree

public static <T> Iterable<Class<?>> getAncestorTree(Class<T> clazz)
Zwraca wszystkie klasy w łańcuchu dziedziczenia oraz wszystkie zaimplementowane interfejsy. Kolejność zwracanych klas jest następująca:

Type Parameters:
T -
Parameters:
clazz -
Returns:


Copyright © 2013. All Rights Reserved.