net.ranides.assira.reflection
Class UnsafeArrayAccess

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

public abstract class UnsafeArrayAccess
extends Object

Klasa udostępniająca bezpośredni dostęp do tablic dowolnego typu znaczniej wydajniej i JIT-friendly, niż reflection API. Samodzielnie zarządza autoboxingiem typów primitive.

Klasa umożliwia 'transparentne' rzutowanie typów prostych, np pozwala traktować tablicę long[] jako tablicę byte[]. Konwersja jest wykonywana natywnie przez system hostujący (a nie przez VM!). Przekłada się to przede wszystkim na względnie większą wydajność kosztem nieprzenośności kodu ze względu na endianess.

Klasa nie może być tworzona bezpośrednio, należy użyć jednej z metod #getInstance

Author:
ranides
See Also:
ArrayUtils.wrap(Object), ArrayUtils.wrap(Class, Object)

Method Summary
static Class<?> asArrayType(Class<?> type)
           
static Class<?> asArrayType(Class<?> type, int dimensions)
           
static Class<?> asComponentType(Class<?> type)
           
 Object change(Object object, int index, Object value)
           
abstract  Object create(int size)
           
static UnsafeArrayAccess forObject(Object array)
           
static UnsafeArrayAccess forType(Class<?> type)
           
static UnsafeArrayAccess forType(Class<?> target, Class<?> source)
          Tworzy obiekt UnsafeArrayAccess odczytujący danez tablicy o klasie sourceType i prezentujący jako tablicę typu targetType.
abstract  Object get(Object object, int index)
           
abstract  int length(Object array)
           
abstract  void put(Object object, int index, Object value)
           
abstract  void putNull(Object array, int index)
           
 
Methods inherited from class java.lang.Object
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

forObject

public static UnsafeArrayAccess forObject(Object array)

forType

public static UnsafeArrayAccess forType(Class<?> type)

forType

public static UnsafeArrayAccess forType(Class<?> target,
                                        Class<?> source)
Tworzy obiekt UnsafeArrayAccess odczytujący danez tablicy o klasie sourceType i prezentujący jako tablicę typu targetType.

Uwaga! Argumenty mają definiować klasę tablicy, a nie jej komponentu

Parameters:
target - typ, na który tablica będzie rzutowana
source - realny typ tablicy przechowującej dane
Returns:

asComponentType

public static Class<?> asComponentType(Class<?> type)

asArrayType

public static Class<?> asArrayType(Class<?> type)

asArrayType

public static Class<?> asArrayType(Class<?> type,
                                   int dimensions)

get

public abstract Object get(Object object,
                           int index)

put

public abstract void put(Object object,
                         int index,
                         Object value)

putNull

public abstract void putNull(Object array,
                             int index)

create

public abstract Object create(int size)

length

public abstract int length(Object array)

change

public Object change(Object object,
                     int index,
                     Object value)


Copyright © 2013. All Rights Reserved.