import java.util.*;
import java.lang.*;
import java.io.*;

class TestClass {
	
	@FunctionalInterface
	public interface ToDoubleFunction<T extends TestClass, U extends Number> {
		Double applyAsDouble(T classInstance, U value);
	}

	<U extends Number> Double getDouble(U value) {
		System.out.println(this);
		
        return value.doubleValue();
    }
    
	public static void main (String[] args) throws java.lang.Exception
	{
		ToDoubleFunction<TestClass, Long> tdf = TestClass::getDouble;
		
		TestClass c = new TestClass();
		
		System.out.println(c);
		
		System.out.println(tdf.applyAsDouble(c, new Long(43)));
	}
}