net.ranides.assira.reflection
Class ObjectInspector

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

public final class ObjectInspector
extends Object

Author:
ranides

Method Summary
static
<T> T
createInstance(Class<T> clazz)
          Tworzy obiekt podanej klasy wywołując domyślny konstruktor.
static
<T> T
createInstance(Class<T> clazz, Object... arguments)
          Tworzy obiekt podanej klasy wywołując najlepiej pasujący konstruktor.
static
<T> T
createInstance(Constructor<T> ctor, Object... arguments)
          Tworzy nowy obiekt wywołując podany konstruktor z podanymi argumentami.
static Object createInstance(String className, Object... arguments)
          Tworzy obiekt klasy o podanej nazwie wywołując najlepiej pasujący konstruktor.
static Method findMethod(Object object, String name)
          Zwraca publiczną metodę o podanej nazwie bez względu na pobierane argumenty.
static Object getField(Class<?> clazz, Object object, String name)
          Wyszukuje i odczytuje wartość klasycznego pola w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna).
static Object getField(Object object, String name)
          Wyszukuje i odczytuje wartość klasycznego pola w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna).
static Method getMethod(Object object, String name, Class<?>... params)
          Sprawdza, czy obiekt posiada publiczną metodę o dokładnie pasujących typach argumentów
static Method getMethod(Object object, String name, int count)
          Zwraca publiczną metodę o podanej nazwie, pobierającą określoną ilość argumentów.
static boolean hasMethod(Object object, String name, Class<?>... params)
          Sprawdza, czy obiekt posiada publiczną metodę o dokładnie pasujących typach argumentów
static boolean hasMethod(Object object, String name, int count)
          Sprawdza, czy obiekt posiada publiczną metodę odpowiedniej ilości argumentów
static Method matchMethod(Object object, String name, Object... values)
          Zwraca metodę o najlepiej pasujących typach argumentów.
static void setField(Class<?> clazz, Object object, String name, Object value)
          Wyszukuje i przypisuje wartość klasycznemu polu w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna).
static void setField(Object object, String name, Object value)
          Wyszukuje i przypisuje wartość klasycznemu polu w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna).
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getMethod

public static Method getMethod(Object object,
                               String name,
                               Class<?>... params)
                        throws InspectException
Sprawdza, czy obiekt posiada publiczną metodę o dokładnie pasujących typach argumentów

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

getMethod

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

Parameters:
object -
name -
count -
Returns:

findMethod

public static Method findMethod(Object object,
                                String name)
Zwraca publiczną metodę o podanej nazwie bez względu na pobierane argumenty.

Parameters:
object -
name -
Returns:

hasMethod

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

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

hasMethod

public static boolean hasMethod(Object object,
                                String name,
                                int count)
Sprawdza, czy obiekt posiada publiczną metodę odpowiedniej ilości argumentów

Parameters:
object -
name -
count -
Returns:

createInstance

public static <T> T createInstance(Constructor<T> ctor,
                                   Object... arguments)
                        throws InspectException
Tworzy nowy obiekt wywołując podany konstruktor z podanymi argumentami.

Type Parameters:
T -
Parameters:
ctor -
arguments -
Returns:
Throws:
InspectException

createInstance

public static <T> T createInstance(Class<T> clazz,
                                   Object... arguments)
                        throws InspectException
Tworzy obiekt podanej klasy wywołując najlepiej pasujący konstruktor. Uwzględnia niepubliczne konstruktory.

Type Parameters:
T -
Parameters:
clazz -
arguments -
Returns:
Throws:
InspectException
See Also:
matchMethod(java.lang.Object, java.lang.String, java.lang.Object...)

createInstance

public static <T> T createInstance(Class<T> clazz)
                        throws InspectException
Tworzy obiekt podanej klasy wywołując domyślny konstruktor. Uwzględnia bezargumentowy konstruktor prywatny, jeśli taki zadeklarowano.

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

createInstance

public static Object createInstance(String className,
                                    Object... arguments)
                             throws InspectException
Tworzy obiekt klasy o podanej nazwie wywołując najlepiej pasujący konstruktor. Uwzględnia niepubliczne konstruktory.

Parameters:
className -
arguments -
Returns:
Throws:
InspectException

setField

public static void setField(Object object,
                            String name,
                            Object value)
                     throws InspectException
Wyszukuje i przypisuje wartość klasycznemu polu w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna). Wyszukuje i próbuje uzyskać dostęp również do pól prywatnych lub chronionych.

Parameters:
object -
name -
value -
Throws:
InspectException

setField

public static void setField(Class<?> clazz,
                            Object object,
                            String name,
                            Object value)
                     throws InspectException
Wyszukuje i przypisuje wartość klasycznemu polu w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna). Wyszukuje i próbuje uzyskać dostęp również do pól prywatnych lub chronionych. Jeśli chcemy zmienić w obiekcie pole prywatne odziedziczone po klasie X, należy jako class podać właśnie X

Parameters:
clazz - klasa, w której zadeklarowano pole
object - obiekt
name -
value -
Throws:
InspectException

getField

public static Object getField(Object object,
                              String name)
                       throws InspectException
Wyszukuje i odczytuje wartość klasycznego pola w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna). Wyszukuje i próbuje uzyskać dostęp również do pól prywatnych lub chronionych.

Parameters:
object -
name -
Returns:
Throws:
InspectException

getField

public static Object getField(Class<?> clazz,
                              Object object,
                              String name)
                       throws InspectException
Wyszukuje i odczytuje wartość klasycznego pola w obiekcie (najczęściej będzie to prywatna zmienna wewnętrzna). Wyszukuje i próbuje uzyskać dostęp również do pól prywatnych lub chronionych. Jeśli chcemy odczytać z obiektu pole prywatne odziedziczone po klasie X, należy jako class podać właśnie X

Parameters:
clazz - klasa, w której zadeklarowano pole
object - obiekt
name -
Returns:
Throws:
InspectException

matchMethod

public static Method matchMethod(Object object,
                                 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:
object -
name -
values -
Returns:
Throws:
InspectException - jeśli nie znaleziono pasującej metody lub wystąpiła niejednoznaczność


Copyright © 2013. All Rights Reserved.