Envolviendo un error genérico de tipo de clase

No entiendo por qué este código muestra este error de compilación.

El error es:

Type mismatch: cannot convert from TestClass.Wrapper<List<capture#1-of ?>> to TestClass.Wrapper<List<?>>

El código está a continuación.

package test.cls;

import java.util.List;

public class TestClass
{
    static abstract class Wrapper<A>
    {
        public abstract A wrapped();
    }

    public static <A> Wrapper<A> wrap(final A val)
    {
        return new Wrapper<A>()
        {
            public A wrapped()
            {
                return val;
            }
        };
    }

    public static void main(final String[] args)
    {
        final List<?> list = null;
        final Class<?> c = null;
        final Wrapper<List<?>> wrapList = wrap(list); // Error here
        final Wrapper<Class<?>> wrapC = wrap(c); // Error here
    }
}

preguntado el 25 de abril de 13 a las 00:04

¿Estás tratando de instanciar una clase abstracta? -

@TheEwook No, el OP está devolviendo una instancia de clase anónima. -

1 Respuestas

La inferencia de tipo genérico del compilador se está ahogando con las capturas de comodines anidados. Debe especificar explícitamente los argumentos de tipo:

final Wrapper<List<?>> wrapList = TestClass.<List<?>>wrap(list);
final Wrapper<Class<?>> wrapC = TestClass.<Class<?>>wrap(c);

Respondido 25 Abr '13, 00:04

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.