Safe Varargs (original) (raw)
Joe Darcy joe.darcy at oracle.com
Tue Jan 25 10:40:33 PST 2011
- Previous message: Safe Varargs
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
Gernot Neppert wrote:
When reading the documentation for SafeVarargs, there were 2 things that I found noteworthy:
1. the distinction between mandatory compiler errors and recommended warnings seems somehow arbitrary: Why is the use of @SafeVarags on a method with reifiable variable-arity parameter not an error? Annotating such a method makes no more sense than annotating a method with fixed-arity!
That is true, but is it is much easier for most Java programmers to tell whether or not a method is varargs then to tell whether or not the element type of the varargs parameters is reifiable. Quick, is Class<?> reifiable or not?
2. On the contrary, the sentence 'Future versions of the platform may mandate compiler errors for such unsafe operations.' smells fishy: this would result in code that is perfectly safe as verified by the programmer to become illegal in a future version. The reason is that the compiler cannot possibly determine whether a 'potentially unsafe' operation is, in fact, unsafe.
For some definition of unsafe, there are classes of operations a compiler could determine were unsafe. Conversely for some definition of safe.
You need only have a look at java.util.Arrays.asList(T.. A) to see this:
@SafeVarargs public static List asList(T... a) { return new ArrayList(a); } This would warrant a compiler warning since passing the variable-arity parameter to another method as an array is 'potentially unsafe'. It would be wrong, however, to reject the code 'in a future version'.
Arrays.asList is anomalous in its use of varargs since it explicitly wants to alias the the argument to serve as the backing store of a new collection. Typically, varargs methods just iterate over the elements of the array.
-Joe
- Previous message: Safe Varargs
- Next message: try-with-resources and null resource
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]