Why do we lose type safety when using List and not while using List<Object>? Aren't they basically the same thing?
EDIT: I found that the following gives a compilation error
public class TestClass
{
    static void func(List<Object> o, Object s){
        o.add(s);
    }
    public static void main(String[] args){
        func(new ArrayList<String>(), new Integer(1));
    }
}
whereas this doesn't
public class TestClass
{
    static void func(List o, Object s){
        o.add(s);
    }
    public static void main(String[] args){
        func(new ArrayList<String>(), new Integer(1));
    }
}
Why?
 
     
     
     
     
     
     
    