Debido a que el compilador usa el borrado de tipo, el tiempo de ejecución no realiza un seguimiento de los parámetros de tipo, por lo que en el tiempo de ejecución la diferencia entre Box <Integer> y Box <String> no se puede verificar usando el operador instanceOf.
Box<Integer> integerBox = new Box<Integer>();
//Compiler Error:
//Cannot perform instanceof check against
//parameterized type Box<Integer>.
//Use the form Box<?> instead since further
//generic type information will be erased at runtime
if(integerBox instanceof Box<Integer>) { }