/* package whatever; // don't place package name! */

/* package whatever; // don't place package name! */

public class Main {
    
    public static class Lazy<T> {
        T field;
        public T get() {
            return field;
        }
    }
    
    public static class Whatever<T> {
        T field;
        public T get() {
            return field;
        }
    }
    
    
    
    public static Lazy<Whatever<String>> lazyWhateverString;
    
    
    public static void main(String args[]) throws Exception {
        
        java.lang.reflect.Field field =  Main.class.getField("lazyWhateverString");
        
        java.lang.reflect.ParameterizedType lazyType = (java.lang.reflect.ParameterizedType) field.getGenericType();
        java.lang.reflect.ParameterizedType whateverType = (java.lang.reflect.ParameterizedType) lazyType.getActualTypeArguments()[0];
        Class<String> realType = (Class<String>) whateverType.getActualTypeArguments()[0];
        
        
        
        
        System.out.println(lazyType.getRawType());
        System.out.println(whateverType.getRawType());
        System.out.println(realType);
    }
}
