Class Data
- java.lang.Object
-
- com.google.api.client.util.Data
-
-
Field Summary
Fields Modifier and Type Field Description static BigDecimal
NULL_BIG_DECIMAL
The single instance of the magic null object for aBigDecimal
.static BigInteger
NULL_BIG_INTEGER
The single instance of the magic null object for aBigInteger
.static Boolean
NULL_BOOLEAN
The single instance of the magic null object for aBoolean
.static Byte
NULL_BYTE
The single instance of the magic null object for aByte
.static Character
NULL_CHARACTER
The single instance of the magic null object for aCharacter
.static DateTime
NULL_DATE_TIME
The single instance of the magic null object for aDateTime
.static Double
NULL_DOUBLE
The single instance of the magic null object for aDouble
.static Float
NULL_FLOAT
The single instance of the magic null object for aFloat
.static Integer
NULL_INTEGER
The single instance of the magic null object for aInteger
.static Long
NULL_LONG
The single instance of the magic null object for aLong
.static Short
NULL_SHORT
The single instance of the magic null object for aShort
.static String
NULL_STRING
The single instance of the magic null object for aString
.
-
Constructor Summary
Constructors Constructor Description Data()
-
Method Summary
All Methods Static Methods Concrete Methods Modifier and Type Method Description 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.static void
deepCopy(Object src, Object dest)
Makes a deep copy of the given source object into the destination object that is assumed to be constructed usingObject.clone()
.static boolean
isNull(Object object)
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)
.static Map<String,Object>
mapOf(Object data)
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.static Map<String,Object>
newMapInstance(Class<?> mapClass)
Returns a new instance of a map based on the given field class.static <T> T
nullOf(Class<?> objClass)
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 Detail
-
NULL_BOOLEAN
public static final Boolean NULL_BOOLEAN
The single instance of the magic null object for aBoolean
.
-
NULL_STRING
public static final String NULL_STRING
The single instance of the magic null object for aString
.
-
NULL_CHARACTER
public static final Character NULL_CHARACTER
The single instance of the magic null object for aCharacter
.
-
NULL_BYTE
public static final Byte NULL_BYTE
The single instance of the magic null object for aByte
.
-
NULL_SHORT
public static final Short NULL_SHORT
The single instance of the magic null object for aShort
.
-
NULL_INTEGER
public static final Integer NULL_INTEGER
The single instance of the magic null object for aInteger
.
-
NULL_FLOAT
public static final Float NULL_FLOAT
The single instance of the magic null object for aFloat
.
-
NULL_LONG
public static final Long NULL_LONG
The single instance of the magic null object for aLong
.
-
NULL_DOUBLE
public static final Double NULL_DOUBLE
The single instance of the magic null object for aDouble
.
-
NULL_BIG_INTEGER
public static final BigInteger NULL_BIG_INTEGER
The single instance of the magic null object for aBigInteger
.
-
NULL_BIG_DECIMAL
public static final BigDecimal NULL_BIG_DECIMAL
The single instance of the magic null object for aBigDecimal
.
-
-
Method Detail
-
nullOf
public static <T> T nullOf(Class<?> objClass)
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
-
isNull
public static boolean isNull(Object object)
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
public static Map<String,Object> mapOf(Object data)
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
public static void deepCopy(Object src, Object dest)
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
public 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.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
public static boolean isValueOfPrimitiveType(Object fieldValue)
Returns whether to given value isnull
or its class is primitive as defined byisPrimitive(Type)
.
-
parsePrimitiveValue
public static Object parsePrimitiveValue(Type type, String stringValue)
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
public static Collection<Object> newCollectionInstance(Type type)
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
public static Map<String,Object> newMapInstance(Class<?> mapClass)
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
public 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.- 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
-
-