java generics generic - No se puede realizar una instancia de verificación contra el tipo parametrizado ArrayList <Foo>





4 Answers

Siempre puedes hacer esto en su lugar

try
{
    if(obj instanceof ArrayList<?>)
    {
        if(((ArrayList<?>)obj).get(0) instanceof MyObject)
        {
            // do stuff
        }
    }
}
catch(NullPointerException e)
{
    e.printStackTrace();
}
method return type

El siguiente código:

((tempVar instanceof ArrayList<Foo>) ? tempVar : null);

causas:

No se puede realizar una instanceof verificación contra el tipo parametrizado ArrayList<Foo> . Utilice el formulario ArrayList<?> lugar, ya que se borrará más información de tipo genérico en tiempo de ejecución

¿Puede alguien explicarme qué se entiende por "se borrará más información de tipo genérico en el tiempo de ejecución" y cómo solucionarlo?




Esto es suficiente:

if(obj instanceof ArrayList<?>)
{
   if(((ArrayList<?>)obj).get(0) instanceof MyObject)
   {
       // do stuff
   }
}

De hecho, un instanceof comprueba si el operando izquierdo es null o no y devuelve false si es realmente null .
Entonces: no es necesario atrapar NullPointerException .




El operador de instanceof funciona en tiempo de ejecución. Pero java no lleva la información del tipo parametrizado en tiempo de ejecución. Se borran en el momento de la compilación. De ahí el error.




Puedes usar

boolean isInstanceArrayList = tempVar.getClass() == ArrayList.class





Related