On 09:24 Wed 03 Aug , Joe Darcy wrote: > On 8/3/2011 12:42 AM, David Holmes wrote: > > Alexandre Boulgakov said the following on 08/03/11 04:44: > >> On 8/2/2011 2:19 AM, Xuelei Fan wrote: > >>> 3017 Vector<Object> temp = (Vector)extractURLs(res.errorMessage); > >>> You may not need the conversion any more, the return value of > >>> extractURLs() has been updated to > >>> 2564 private static Vector<String> extractURLs(String > >>> refString) > >> The cast is needed to go from Vector<String> to Vector<Object>. > > > > Raw types should be avoided (here and elsewhere there are casts to raw > > Vector). I'm surprised (generics continue to surprise me) that despite > > all our advances in type-inference etc that the compiler can not tell > > that a Vector<T> is-a Vector<Object>. :( > > That is because in general a Vector<T> is not a Vector<Object> because > of the way subtyping works. As with arrays, it all looks fine until you > want to change the container; consider > > Vector<String> vs = new Vector<>(); > ... > Vector<Object> vo = vs; // Assume this was okay to alias an object > vector and a string vector > > vo.add(new Integer(1)); // Add an Integer to a list of strings, boom! > > Using wildcards makes the subtyping work along the type argument axis. >
Exactly. What I wondered on reading this is why it needs to be cast to a Vector<Object> anyway. That would only reduce type safety as you say. > -Joe > -- Andrew :) Free Java Software Engineer Red Hat, Inc. (http://www.redhat.com) Support Free Java! Contribute to GNU Classpath and IcedTea http://www.gnu.org/software/classpath http://icedtea.classpath.org PGP Key: F5862A37 (https://keys.indymedia.org/) Fingerprint = EA30 D855 D50F 90CD F54D 0698 0713 C3ED F586 2A37