Class Data
Key
annotation.- Since:
- 1.4
-
Field Summary
FieldsModifier and TypeFieldDescriptionstatic final BigDecimal
The single instance of the magic null object for aBigDecimal
.static final BigInteger
The single instance of the magic null object for aBigInteger
.static final Boolean
The single instance of the magic null object for aBoolean
.static final Byte
The single instance of the magic null object for aByte
.private static final ConcurrentHashMap
<Class<?>, Object> Cache of the magic null object for the given Java class.static final Character
The single instance of the magic null object for aCharacter
.static final DateTime
The single instance of the magic null object for aDateTime
.static final Double
The single instance of the magic null object for aDouble
.static final Float
The single instance of the magic null object for aFloat
.static final Integer
The single instance of the magic null object for aInteger
.static final Long
The single instance of the magic null object for aLong
.static final Short
The single instance of the magic null object for aShort
.static final String
The single instance of the magic null object for aString
. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionstatic <T> T
clone
(T data) Returns a deep clone of the given key/value data, such that the result is a completely independent copy.private static Object
createNullInstance
(Class<?> objClass) static void
Makes a deep copy of the given source object into the destination object that is assumed to be constructed usingObject.clone()
.static boolean
Returns whether the given object is the magic object that represents the null value of its class.static boolean
isPrimitive
(Type type) Returns whether the given type is one of the supported primitive classes like number and date/time, or is a wildcard of one.static boolean
isValueOfPrimitiveType
(Object fieldValue) Returns whether to given value isnull
or its class is primitive as defined byisPrimitive(Type)
.Returns the map to use for the given data that is treated as a map from string key to some value.static Collection
<Object> newCollectionInstance
(Type type) Returns a new collection instance for the given type.newMapInstance
(Class<?> mapClass) Returns a new instance of a map based on the given field class.static <T> T
Returns the single instance of the magic object that represents the "null" value for the given Java class (including array or enum).static Object
parsePrimitiveValue
(Type type, String stringValue) Parses the given string value based on the given primitive type.static Type
resolveWildcardTypeOrTypeVariable
(List<Type> context, Type type) Aggressively resolves the given type in such a way that the resolved type is not a wildcard type or a type variable, returningObject.class
if the type variable cannot be resolved.
-
Field Details
-
NULL_BOOLEAN
The single instance of the magic null object for aBoolean
. -
NULL_STRING
The single instance of the magic null object for aString
. -
NULL_CHARACTER
The single instance of the magic null object for aCharacter
. -
NULL_BYTE
The single instance of the magic null object for aByte
. -
NULL_SHORT
The single instance of the magic null object for aShort
. -
NULL_INTEGER
The single instance of the magic null object for aInteger
. -
NULL_FLOAT
The single instance of the magic null object for aFloat
. -
NULL_LONG
The single instance of the magic null object for aLong
. -
NULL_DOUBLE
The single instance of the magic null object for aDouble
. -
NULL_BIG_INTEGER
The single instance of the magic null object for aBigInteger
. -
NULL_BIG_DECIMAL
The single instance of the magic null object for aBigDecimal
. -
NULL_DATE_TIME
The single instance of the magic null object for aDateTime
. -
NULL_CACHE
Cache of the magic null object for the given Java class.
-
-
Constructor Details
-
Data
public Data()
-
-
Method Details
-
nullOf
Returns the single instance of the magic object that represents the "null" value for the given Java class (including array or enum).- Parameters:
objClass
- class of the object needed- Returns:
- magic object instance that represents the "null" value (not Java
null
) - Throws:
IllegalArgumentException
- if unable to create a new instance
-
createNullInstance
-
isNull
Returns whether the given object is the magic object that represents the null value of its class.- Parameters:
object
- object ornull
- Returns:
- whether it is the magic null value or
false
fornull
input
-
mapOf
Returns the map to use for the given data that is treated as a map from string key to some value.If the input is
null
, it returns an empty map. If the input is a map, it simply returns the input. Otherwise, it will create a map view using reflection that is backed by the object, so that any changes to the map will be reflected on the object. The map keys of that map view are based on theKey
annotation, and null is not a possible map value, although the magic null instance is possible (seenullOf(Class)
andisNull(Object)
). Iteration order of the data keys is based on the sorted (ascending) key names of the declared fields. Note that since the map view is backed by the object, and that the object may change, many methods in the map view must recompute the field values using reflection, for exampleMap.size()
must check the number of non-null fields.- Parameters:
data
- any key value data, represented by an object or a map, ornull
- Returns:
- key/value map to use
-
clone
public static <T> T clone(T data) Returns a deep clone of the given key/value data, such that the result is a completely independent copy.This should not be used directly in the implementation of
Object.clone()
. Instead usedeepCopy(Object, Object)
for that purpose.Final fields cannot be changed and therefore their value won't be copied.
- Parameters:
data
- key/value data object or map to clone ornull
for anull
return value- Returns:
- deep clone or
null
fornull
input
-
deepCopy
Makes a deep copy of the given source object into the destination object that is assumed to be constructed usingObject.clone()
.Example usage of this method in
Object.clone()
:@Override public MyObject clone() { try { @SuppressWarnings("unchecked") MyObject result = (MyObject) super.clone(); Data.deepCopy(this, result); return result; } catch (CloneNotSupportedException e) { throw new IllegalStateException(e); } }
Final fields cannot be changed and therefore their value won't be copied.
- Parameters:
src
- source objectdest
- destination object of identical type as source object, and any contained arrays must be the same length
-
isPrimitive
Returns whether the given type is one of the supported primitive classes like number and date/time, or is a wildcard of one.A primitive class is any class for whom
Class.isPrimitive()
is true, as well as any classes of type:Character
,String
,Integer
,Long
,Short
,Byte
,Float
,Double
,BigInteger
,BigDecimal
,Boolean
, andDateTime
.- Parameters:
type
- type ornull
forfalse
result- Returns:
- whether it is a primitive
-
isValueOfPrimitiveType
Returns whether to given value isnull
or its class is primitive as defined byisPrimitive(Type)
. -
parsePrimitiveValue
Parses the given string value based on the given primitive type.Types are parsed as follows:
Void
: nullnull
or is assignable fromString
(likeObject
): no parsingchar
orCharacter
:String.charAt
(0) (requires length to be exactly 1)boolean
orBoolean
:Boolean.valueOf(String)
byte
orByte
:Byte.valueOf(String)
short
orShort
:Short.valueOf(String)
int
orInteger
:Integer.valueOf(String)
long
orLong
:Long.valueOf(String)
float
orFloat
:Float.valueOf(String)
double
orDouble
:Double.valueOf(String)
BigInteger
:BigInteger(String)
BigDecimal
:BigDecimal(String)
DateTime
:DateTime.parseRfc3339(String)
Note that this may not be the right behavior for some use cases.
- Parameters:
type
- primitive type ornull
to parse as a stringstringValue
- string value to parse ornull
fornull
result- Returns:
- parsed object or
null
fornull
input - Throws:
IllegalArgumentException
- if the given class is not a primitive class
-
newCollectionInstance
Returns a new collection instance for the given type.Creates a new collection instance specified for the first input collection class that matches as follows:
null
or an array or assignable fromArrayList
(likeList
orCollection
orObject
): returns anArrayList
- assignable from
HashSet
: returns aHashSet
- assignable from
TreeSet
: returns aTreeSet
- else: calls
Types.newInstance(Class)
- Parameters:
type
- type ornull
forArrayList
.- Returns:
- new collection instance
- Throws:
ClassCastException
- if result is does not extendCollection
-
newMapInstance
Returns a new instance of a map based on the given field class.Creates a new map instance specified for the first input map class that matches as follows:
- Parameters:
mapClass
- field class- Throws:
ClassCastException
- if result is does not extendMap
-
resolveWildcardTypeOrTypeVariable
Aggressively resolves the given type in such a way that the resolved type is not a wildcard type or a type variable, returningObject.class
if the type variable cannot be resolved.- Parameters:
context
- context list, ordering from least specific to most specific type context, for example container class and then its fieldtype
- type ornull
fornull
result- Returns:
- resolved type (which may be class, parameterized type, or generic array type, but not
wildcard type or type variable) or
null
fornull
input
-