Adding Wildcards to the Java Programming Language
This paper describes wildcards, a new language construct designed to increase the flexibility of object-oriented type systems with parameterized classes. Based on the notion of use-site variance, wildcards provide a type safe abstraction over different instantiations of parameterized classes, by using ‘?’ to denote unspecified type arguments. Thus they essentially unify the distinct families of classes often introduced by parametric polymorphism. Wildcards are implemented as part of the upcoming addition of generics to the JavaTM programming language, and will thus be deployed world-wide as part of the reference implementation of the Java compiler javac available from Sun Microsystems, Inc. By providing a richer type system, wildcards allow for an improved type inference scheme for polymorphic method calls. Moreover, by means of a novel notion of wildcard capture, polymorphic methods can be used to give symbolic names to unspecified types, in a manner similar to the “open” construct known from existential types. Wildcards show up in numerous places in the Java Platform APIs of the upcoming release, and some of the examples in this paper are taken from these APIs.
…
Wildcards are the result of a joint project between The University of Aarhus and Sun Microsystems, Inc., in which we set out to investigate if these theoretical proposals could be adapted and matured to fit naturally into a future version of the language extended with parametric polymorphism, and whether an efficient implementation was feasible.
…
The development process has raised a wealth of interesting theoretical and implementational issues. The focus of this paper, however, is on what is probably most important to users of the language: the new language constructs, and the problems they address. While our experiences are specific to the Java programming language, wildcards should be equally well suited for other object-oriented languages, such as C#, having or planning an implementation of parametric polymorphism.
…
Prior to the introduction of generics into the Java programming language, an object of type List was just a list, not a list of any specific type of object. However, often all elements inserted into a list would have a common type, and elements extracted from the list would be viewed under that type by a dynamic cast. To make this usage type safe, GJ lets classes like List be parameterized with an element type. Objects inserted must then have that type, and in return extracted objects are known to have that type, avoiding the unsafe cast. In most cases, this is an improvement over the previous non-generic scheme, but it makes it harder to treat a list as “just a list”, independent of the element type. For instance, a method could take a List as an argument and only be interested in clearing it or reading properties like the length.
…
Website: bracha.org | Filesize: 129kb
No of Page(s): 8
Click here to download Adding Wildcards to the Java Programming Language
Related Tutorial
Tags: Generics, java platform, Object Oriented, wildcard
Comments
Leave a Reply