package spdxedit.util; import java.util.Objects; import java.util.function.Function; /** * Trivial decorator of any object with a dynamically assignable toString() method. * Useful for populating items in JavaFX tables/list without extending their cell classes (yuck!) * Delegates equals() and hashcode() to the underlying value. */ public class StringableWrapper<T>{ private T value; private Function<T, String> toString; public static <T> StringableWrapper<T> wrap(T value, Function<T, String> toString){ return new StringableWrapper<>(value, toString); } private StringableWrapper(T value, Function<T, String> toString){ this.value = value; this.toString = toString; } @Override public int hashCode() { return Objects.hashCode(value); } @Override public boolean equals(Object obj) { return obj != null && obj instanceof StringableWrapper && Objects.equals(getValue(), ((StringableWrapper)obj).getValue()); } @Override public String toString(){ return this.toString.apply(value); } public T getValue(){ return value; } }