Tipo genérico perdido por miembro de tipo crudo

He encontrado un comportamiento extraño al trabajar con genéricos.

En esta claseFoo<T>, lastrings miembro no tiene nada que ver conT:

package test;
import java.util.ArrayList;

public class Foo<T> {
    ArrayList<String> strings;

    T getSome() {
        return null;
    }
}

La clase se usa en main:

package test;

public class Main {

    public static void main() {
        Foo<Integer> intFoo = new Foo<>();
        Integer i = intFoo.getSome();
        String s1 = intFoo.strings.get(0);

        Foo rawFoo = new Foo();
        Object o = rawFoo.getSome();
        String s2 = rawFoo.strings.get(0); // Compilation error on this line
    }
}

El error de compilación es "tipos incompatibles. Requerido: Cadena encontrada: Objeto".

Parece que Java se olvida de laString escriba argumento paraArrayList cuando el tipo crudo deFoo se utiliza

Mi versión de java es 1.7.0_21

Respuestas a la pregunta(1)

Su respuesta a la pregunta