compsci 100e 40.1 java 5 new features generics enhanced for loop autoboxing/unboxing typesafe...
TRANSCRIPT
![Page 1: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/1.jpg)
CompSci 100E 40.1
Java 5 New Features
Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other
Varargs Static Import Metadata New classes and methods VM Enhancements
![Page 2: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/2.jpg)
CompSci 100E 40.2
Generics Allows classes to store objects whose type is
irrelevant to storing class, while allowing type-safe retrieval
E.g., Collection Syntax
ArrayList<String> list = new ArrayList<String>();list.put(“hello”); // put() takes a StringIterator<String> iter = list.iterator();String s = iter.next(); // next() returns a String
Compare with earlier JavaArrayList list = new ArrayList();list.put(“hello”); // put() takes an ObjectIterator iter = list.iterator();String s = (String)iter.next(); // next() returns an Object which must be cast to String
![Page 3: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/3.jpg)
CompSci 100E 40.3
Generics in API Docs
In API documentation, generics are given a type alias, e.g., “E”:
Alias is arbitrary, but stands for the same type throughout class definition
Can be on more than one type using different aliases Examples
Class ArrayList<E>o add(E o)o E get(int index)
Interface Map<K,V>o V put(K key, V value)o V get(Object key)o Collection<V> values()
![Page 4: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/4.jpg)
CompSci 100E 40.4
Enhanced for Loop
Replaced iterators, indexing
Iterators and indexing are prone to bounds errors
// throws ArrayIndexOutOfBoundsExceptionfor (int i = 0; i <= arr.length; i++)
{ System.out.println(arr[i]); }
// what does this do?Iterator iter = list.iterator();while (iter.hasNext()) {
if (!“stop”.equals(iter.next())) {System.out.println(iter.next());
}}
![Page 5: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/5.jpg)
CompSci 100E 40.5
Looping in Java 5 Java 5 introduces new language syntax for
looping over arrays and collections using for (aka “For-Each” loop)
Syntax:for (type var: collection) {
// do something with var}
Examples:void processArray(String[] arr) {
for (String s: arr) System.out.println(s.toUpperCase());
}
// generics work with new for loop to simplify syntax!void processList(List<String> list) {
for (String s: list) System.out.println(s);
}
![Page 6: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/6.jpg)
CompSci 100E 40.6
Autoboxing/Unboxing
Java primitive types provided for performance, but mix poorly with objects:
// compilation error!ArrayList list = new ArrayList();list.add(42);int x = (int) list.get(0);
// Kludgey fix provided by original Java: ugh!list.add(new Integer(42));int x = ((Integer)list.get(0)).intValue()
Java 5 automatically “boxes” primitive types in Object types as neeeded:
Integer objInt;objInt = 42; // equivalent to objInt = new Integer(42);
![Page 7: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/7.jpg)
CompSci 100E 40.7
Autoboxing with Generics and For-Each Note again how the new Java 5 features work
together:
// old syntaxInteger sumInteger(List list) {
int sum = 0;Iterator iter = list.iterator();while (iter.hasNext()) {
Integer iobj = (Integer) iter.next();sum += iobj.intValue();
}}return new Integer(sum);
// new syntaxInteger sumIntegers(List<Integer> list) {
int sum = 0;for (int x: list) sum+= x; // auto-unboxing elements
return sum; // autobox return value
}
![Page 8: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/8.jpg)
CompSci 100E 40.8
New Features: Limitations Generics are not everywhere, yet
consider list.toArray() returning Object[]
Enhanced for loop on non-parameterized collections is still annoying (obviously using generics helps, but what if you are forced to use legacy code?)
for (Object o: list) { String s = (String)o; ... }
For loop doesn't give you a good way to loop over multiple collections in parallel: still must do:
int[] arr1, arr2;for (int i; i < arr1.length; i++) {
int x = arr1[i] + arr2[i];}
![Page 9: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/9.jpg)
CompSci 100E 40.9
New Features: Limitations (con't)
Autoboxing doesn't carry over to arrays, or to converting arrays to lists and vice versa: can't do the following:
int[] arr = new int[100]; Integer[] arrInts = arr;
List<Integer> list = new ArrayList<Integer>(); list.addAll(arr);
![Page 10: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/10.jpg)
CompSci 100E 40.10
Typesafe Enums
Enums are a safer alternative to constants Old way:
public static final int GO = 0;public static final int STOP = 1;public static final int YIELD = 2;....
Consider code taking these values as a parameter:void process(int status) {
if (status == GO) ...if (status == STOP) ...if (status == YIELD) ...else ... // what does status == 10 mean?
![Page 11: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/11.jpg)
CompSci 100E 40.11
The Enum Alternative Enums define a type, just like a class or primitive
type Enums are not interchangeable with ints,
impossible to get undefined values Enums can be enumerated using for String representations of enums actually mean
something Examples:
public enum TrafficLight { GO, STOP, YIELD }public TrafficLight myLight = STOP;for (TrafficLight t: TrafficLight.values()) {
System.out.print(t);System.out.print(“ “);
}// output: GO STOP YIELD
![Page 12: CompSci 100E 40.1 Java 5 New Features Generics Enhanced for loop Autoboxing/unboxing Typesafe enums Other Varargs Static Import Metadata](https://reader036.vdocuments.net/reader036/viewer/2022083008/56649f315503460f94c4c21b/html5/thumbnails/12.jpg)
CompSci 100E 40.12
Other New Features
Java 5 has many other new features, including: Varargs – variable-size argument lists for
methods Static Import – import constants, e.g. Math.PI Metadata – attach extra information about code New classes and methods – Queue, Scanner,
printf, etc. VM Enhancements