Class LightMetaBean<T extends Bean>
- java.lang.Object
-
- org.joda.beans.impl.light.LightMetaBean<T>
-
- Type Parameters:
T
- the type of the bean
- All Implemented Interfaces:
MetaBean
,TypedMetaBean<T>
public final class LightMetaBean<T extends Bean> extends Object implements TypedMetaBean<T>
A meta-bean implementation that operates using method handles.The properties are found using the
PropertyDefinition
annotation. There must be a constructor matching the property definitions (arguments of same order and types).This uses method handles to avoid problems with reflection
setAccessible()
in Java SE 9. The old reflection approach is still present, but deprecated.
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description Class<T>
beanType()
Get the type of the bean, represented as aClass
.BeanBuilder<T>
builder()
Creates a bean builder that can be used to create an instance of this bean.boolean
equals(Object obj)
int
hashCode()
boolean
isBuildable()
Checks whether this bean is buildable or not.<R> MetaProperty<R>
metaProperty(String propertyName)
Gets a meta-property by name.Map<String,MetaProperty<?>>
metaPropertyMap()
Gets the map of meta-properties, keyed by property name.static <B extends Bean>
LightMetaBean<B>of(Class<B> beanClass)
Deprecated.Use method handles version of this methodstatic <B extends Bean>
LightMetaBean<B>of(Class<B> beanType, MethodHandles.Lookup lookup)
Obtains an instance of the meta-bean using standard default values.static <B extends Bean>
LightMetaBean<B>of(Class<B> beanType, MethodHandles.Lookup lookup, Object... defaultValues)
Deprecated.Use version with field names, because no way to determine order of fields by reflectionstatic <B extends Bean>
LightMetaBean<B>of(Class<B> beanType, MethodHandles.Lookup lookup, String[] fieldNames, Object... defaultValues)
Obtains an instance of the meta-bean specifying default values.String
toString()
Returns a string that summarises the meta-bean.LightMetaBean<T>
withAlias(String alias, String realName)
Adds an alias to the meta-bean.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.joda.beans.MetaBean
annotation, annotationOpt, annotations, beanName, metaPropertyCount, metaPropertyExists, metaPropertyIterable
-
-
-
-
Method Detail
-
of
@Deprecated public static <B extends Bean> LightMetaBean<B> of(Class<B> beanClass)
Deprecated.Use method handles version of this methodObtains an instance of the meta-bean.The properties will be determined using reflection to find the
PropertyDefinition
annotation.- Type Parameters:
B
- the type of the bean- Parameters:
beanClass
- the bean class, not null- Returns:
- the meta-bean, not null
-
of
public static <B extends Bean> LightMetaBean<B> of(Class<B> beanType, MethodHandles.Lookup lookup)
Obtains an instance of the meta-bean using standard default values.The properties will be determined using reflection to find the fields. Each field must have a
PropertyDefinition
annotation. The order of the properties is undefined as Java fields are not necessarily returned in source code order.The default values for primitives are determined automatically. If the bean has non-primitive values like lists and maps that need defaulting then
of(Class, java.lang.invoke.MethodHandles.Lookup, String[], Object...)
must be used.- Type Parameters:
B
- the type of the bean- Parameters:
beanType
- the bean type, not nulllookup
- the method handle lookup, not null- Returns:
- the meta-bean, not null
-
of
@Deprecated public static <B extends Bean> LightMetaBean<B> of(Class<B> beanType, MethodHandles.Lookup lookup, Object... defaultValues)
Deprecated.Use version with field names, because no way to determine order of fields by reflectionObtains an instance of the meta-bean specifying default values.The properties will be determined using reflection to find the
PropertyDefinition
annotation.The default values must be provided if they cannot be determined automatically. Default values for primitives are determined automatically, but empty lists and maps are not.
- Type Parameters:
B
- the type of the bean- Parameters:
beanType
- the bean type, not nulllookup
- the method handle lookup, not nulldefaultValues
- the default values, one for each property, not null- Returns:
- the meta-bean, not null
-
of
public static <B extends Bean> LightMetaBean<B> of(Class<B> beanType, MethodHandles.Lookup lookup, String[] fieldNames, Object... defaultValues)
Obtains an instance of the meta-bean specifying default values.The properties will be determined using reflection to find the
PropertyDefinition
annotation.The field names must be specified as reflection does not return fields in source code order. The default values must be provided if they cannot be determined automatically. Default values for primitives are determined automatically, but empty lists and maps are not.
- Type Parameters:
B
- the type of the bean- Parameters:
beanType
- the bean type, not nulllookup
- the method handle lookup, not nullfieldNames
- the field names, one for each property, not nulldefaultValues
- the default values, one for each property, not null- Returns:
- the meta-bean, not null
-
withAlias
public LightMetaBean<T> withAlias(String alias, String realName)
Adds an alias to the meta-bean.When using
metaProperty(String)
, the alias will return the meta-property of the real name.- Parameters:
alias
- the aliasrealName
- the real name- Returns:
- the new meta-bean instance
- Throws:
IllegalArgumentException
- if the realName is invalid
-
isBuildable
public boolean isBuildable()
Description copied from interface:MetaBean
Checks whether this bean is buildable or not.A buildable bean can be constructed using
MetaBean.builder()
. If this method returns true thenbuilder()
must return a valid builder. If this method returns false thenbuilder()
must throwUnsupportedOperationException
.- Specified by:
isBuildable
in interfaceMetaBean
- Returns:
- true if this bean is buildable
-
builder
public BeanBuilder<T> builder()
Description copied from interface:MetaBean
Creates a bean builder that can be used to create an instance of this bean.The builder is used in two main ways. The first is to allow immutable beans to be constructed. The second is to enable automated tools like serialization/deserialization.
The builder can be thought of as a
Map
ofMetaProperty
to value. Note that the implementation is not necessarily an actual map.
-
beanType
public Class<T> beanType()
Description copied from interface:MetaBean
Get the type of the bean, represented as aClass
.A
MetaBean
can be thought of as the equivalent ofClass
but for beans. This method allows the actualClass
instance of the bean to be obtained.
-
metaProperty
public <R> MetaProperty<R> metaProperty(String propertyName)
Description copied from interface:MetaBean
Gets a meta-property by name.Each meta-bean manages a single bean with a known set of properties. This method returns the property with the specified name.
The base interface throws an exception if the name is not recognised. By contrast, the
DynamicMetaBean
subinterface creates the property on demand.- Specified by:
metaProperty
in interfaceMetaBean
- Type Parameters:
R
- the property type, optional, enabling auto-casting- Parameters:
propertyName
- the property name to retrieve, not null- Returns:
- the meta property, not null
-
metaPropertyMap
public Map<String,MetaProperty<?>> metaPropertyMap()
Description copied from interface:MetaBean
Gets the map of meta-properties, keyed by property name.Where possible, use
MetaBean.metaPropertyIterable()
instead as it typically has better performance.- Specified by:
metaPropertyMap
in interfaceMetaBean
- Returns:
- the unmodifiable map of meta property objects, not null
-
-