All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.joda.beans.Property Maven / Gradle / Ivy

There is a newer version: 2.11.1
Show newest version
/*
 *  Copyright 2001-present Stephen Colebourne
 *
 *  Licensed under the Apache License, Version 2.0 (the "License");
 *  you may not use this file except in compliance with the License.
 *  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 *  Unless required by applicable law or agreed to in writing, software
 *  distributed under the License is distributed on an "AS IS" BASIS,
 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 *  See the License for the specific language governing permissions and
 *  limitations under the License.
 */
package org.joda.beans;

/**
 * A property that is linked to a specific bean.
 * 

* For a JavaBean, this will ultimately wrap a get/set method pair. * Alternate implementations may perform any logic to obtain the value. * * @param

the type of the property content * @author Stephen Colebourne */ public interface Property

{ /** * Gets the bean which owns this property. *

* Each property is fully owned by a single bean. * * @param the bean type * @return the bean, not null */ public abstract B bean(); /** * Gets the meta-property representing the parts of the property that are * common across all instances, such as the name. * * @return the meta-property, not null */ public abstract MetaProperty

metaProperty(); /** * Gets the property name. *

* The JavaBean style methods getFoo() and setFoo() will lead to a property * name of 'foo' and so on. * * @return the name of the property, not empty */ public default String name() { return metaProperty().name(); } //----------------------------------------------------------------------- /** * Gets the value of the property for the associated bean. *

* For a JavaBean, this is the equivalent to calling getFoo() on the bean itself. * Alternate implementations may perform any logic to obtain the value. * * @return the value of the property on the bound bean, may be null * @throws UnsupportedOperationException if the property is write-only */ public default P get() { return metaProperty().get(bean()); } /** * Sets the value of the property on the associated bean. *

* The value must be of the correct type for the property. * See the meta-property for string conversion. * For a standard JavaBean, this is equivalent to calling setFoo() on the bean. * Alternate implementations may perform any logic to change the value. * * @param value the value to set into the property on the bean * @throws ClassCastException if the value is of an invalid type for the property * @throws UnsupportedOperationException if the property is read-only * @throws RuntimeException if the value is rejected by the property (use appropriate subclasses) */ public default void set(Object value) { metaProperty().set(bean(), value); } /** * Sets the value of the property on the associated bean and returns the previous value. *

* This is a combination of the {@code get} and {@code set} methods that matches the definition * of {@code put} in a {@code Map}. * * @param value the value to set into the property on the bean * @return the old value of the property, may be null * @throws ClassCastException if the value is of an invalid type for the property * @throws UnsupportedOperationException if the property is read-only * @throws RuntimeException if the value is rejected by the property (use appropriate subclasses) */ public default P put(Object value) { return metaProperty().put(bean(), value); } //----------------------------------------------------------------------- /** * Checks if this property equals another. *

* This compares the meta-property and value. * It does not consider the property or bean types. * * @param obj the other property, null returns false * @return true if equal */ @Override public abstract boolean equals(Object obj); /** * Returns a suitable hash code. * * @return the hash code */ @Override public abstract int hashCode(); }