import java.util.function.Function;

public final class GenericConstructorDemo {
    static final class Receipt {
        private final String description;

        <T> Receipt(T source, Function<T, String> describe) {
            description = describe.apply(source);
        }

        String description() {
            return description;
        }
    }

    private GenericConstructorDemo() { }

    public static void main(String[] args) {
        Receipt number = new Receipt(42, n -> "n=" + n);
        Receipt word = new Receipt("java", String::toUpperCase);
        System.out.println(number.description());
        System.out.println(word.description());
    }
}
