
org.whaka.util.reflection.properties.FunctionalClassProperty Maven / Gradle / Ivy
package org.whaka.util.reflection.properties;
import java.util.function.BiConsumer;
import java.util.function.Function;
import org.whaka.util.reflection.Visibility;
public class FunctionalClassProperty implements ClassProperty {
private final ClassPropertyKey key;
private final Class type;
private final Visibility visibility;
private final boolean _static;
private final Function getter;
private final BiConsumer setter;
public FunctionalClassProperty(ClassPropertyKey key, Class type, Visibility visibility,
Function getter) {
this(key, type, visibility, getter, null);
}
public FunctionalClassProperty(ClassPropertyKey key, Class type, Visibility visibility,
Function getter, BiConsumer setter) {
this(key, type, visibility, getter, setter, false);
}
public FunctionalClassProperty(ClassPropertyKey key, Class type, Visibility visibility,
Function getter, BiConsumer setter, boolean _static) {
this.key = key;
this.type = type;
this.visibility = visibility;
this._static = _static;
this.getter = getter;
this.setter = setter;
}
@Override
public ClassPropertyKey getKey() {
return key;
}
@Override
public Class getType() {
return type;
}
@Override
public Visibility getVisibility() {
return visibility;
}
@Override
public boolean isStatic() {
return _static;
}
public Function getGetter() {
return getter;
}
public BiConsumer getSetter() {
return setter;
}
@Override
public Type getValue(TargetType target) throws Exception {
return getter.apply(target);
}
/**
* throws UnsupportedOperationException if {@link #isMutable()} returns false.
*/
@Override
public void setValue(TargetType target, Type value) throws Exception {
if (!isMutable())
throw new UnsupportedOperationException("No setter function specified!");
setter.accept(target, value);
}
/**
* Returns false
is no setter function was specified for this property.
*/
@Override
public boolean isMutable() {
return setter != null;
}
public static FunctionalClassProperty newPublic(ClassPropertyKey key,
Class type, Function getter) {
return new FunctionalClassProperty<>(key, type, Visibility.PUBLIC, getter);
}
public static FunctionalClassProperty newPublic(ClassPropertyKey key,
Class type, Function getter, BiConsumer setter) {
return new FunctionalClassProperty<>(key, type, Visibility.PUBLIC, getter, setter);
}
public static FunctionalClassProperty newPublic(ClassPropertyKey key,
Class type, Function getter, BiConsumer setter, boolean _static) {
return new FunctionalClassProperty<>(key, type, Visibility.PUBLIC, getter, setter, _static);
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy