    @Test
    public void testNestedGenerics() {

        TypeLiteral<Map<String, List<? extends Number>>>  typeLiteral1 = new TypeLiteral<Map<String, List<? extends Number>>>(){};
        TypeLiteral<Map<String, List<? extends Number>>>  typeLiteral2 = TypeLiteral.mapOf(new TypeLiteral<String>(){}, new TypeLiteral<List<? extends Number>>(){});
        TypeLiteral<Map<String, List<? extends Integer>>> typeLiteral3 = new TypeLiteral<Map<String, List<? extends Integer>>>(){};
        TypeLiteral<Map<String, List<? extends Integer>>> typeLiteral4 = TypeLiteral.mapOf(new TypeLiteral<String>(){}, new TypeLiteral<List<? extends Integer>>(){});

        assertEquals(typeLiteral1, typeLiteral2);
        assertEquals(typeLiteral3, typeLiteral4);

        assertNotEquals(typeLiteral1, typeLiteral3);
        assertNotEquals(typeLiteral1, typeLiteral4);
        assertNotEquals(typeLiteral2, typeLiteral3);
        assertNotEquals(typeLiteral2, typeLiteral4);
    }