泛型的擦除和补偿问题

public class Genericity{
public static void main(String[] args) {
A a = new A();
Object o = a.show(); //没有报错,o得到一个字符串"123"
Object o2 = a.show().toString(); //报错,在toString之前加载了ClassLoader.java中的loadClass(),抛出ClassCastException
}
}

class A{
E show(){
ArrayList arrayList = new ArrayList();
arrayList.add("123");
E o = (E)arrayList.get(0).toString(); //没有报错,强制转型也没有发生,o为字符串"123"
System.out.println(o);
return (E)arrayList.get(0);
}
}

在这里,为什么只有Object o2 = a.show().toString();这里会报错,泛型擦除补偿机制的触发条件是什么

http://blog.csdn.net/rusbme/article/details/51241269