package org.tessell.model.values; import org.tessell.model.properties.Property; /** * Wraps a Java 8 lambda as a {@link Value}. * * This is for making {@link Property}s around a value you compute with a lambda. * * Note that while Tessell previously had {@link DerivedValue} for pre-Java 8 * "lambdas as anonymous inner classes", DerivedValue is not a FunctionalInterface; * hence introducing {@code LambdaValue}. */ @FunctionalInterface public interface LambdaValue<P> extends Value<P> { @Override abstract P get(); @Override default boolean isReadOnly() { return true; } @Override default void set(final P value) { throw new IllegalStateException(this + " is a derived value"); } @Override default String getName() { return "derived"; } }