New features in JDK 1.5 Can these new and complex features simplify Java development?...

56
1 APRS is a registered trademark Bob Bruninga, WB4APR APRS.o APRS.o rg rg Using Your APRS Using Your APRS Mobile Mobile DCC 2010 Human to human info exchange! http://aprs.org/D7xx/ d700-faq.txt

Transcript of New features in JDK 1.5 Can these new and complex features simplify Java development?...

Page 1: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

New features in JDK 1.5

Can these new and complex features simplify Java

development?

[email protected]

Page 2: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Overview

• Generic Types• Auto-boxing/unboxing• Enhanced For Loop• Enumerations• Variable Arguments• Static Import• Meta-data

• Formatted I/O• Concurrency Utilities• Management Utilities• Class Data Sharing• Loads of other

improvements

Page 3: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Reasoning

"The new language features all have one thing in common: they take some common idiom and provide linguistic support for it. In other words, they shift the responsibility for writing the boilerplate code from the programmer to the compiler."

- Joshua Bloch, senior staff engineer, Sun Microsystems

Page 4: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Complementary Features

• Generics improve enhanced for loop

• Generics and auto-boxing/unboxing allow Enumerated types

• Variable args improve API usability

• Variable args allow formatted I/O

Page 5: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

New features enhance existing API• Generics enhance compile time type

checking

• Generics improve reflection

• Generics allow return type overriding

• Enum improves readability and organization of constants

• Static import improves utility functions

• Auto-boxing improves readability

Page 6: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Generic Types

interface Collection <E> {

boolean add(E o);

boolean addAll(Collection<? extends E> c);

Iterator<E> iterator();

<T> T[] toArray(T[] a);

}

Page 7: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Generic Interface (or Class)interface Collection <E> …

Collection<Integer> integers;

E is the type parameter for the generic type

Collection is the raw type after type erasure

Integer is the actual type parameter used when declaring an instance of the generic type

Cannot use primitive types but auto-boxing covers over the difference

Page 8: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Using the Type Parameter boolean add(E o);

Where ever E is used, the compiler will check the type against the actual type parameter. At runtime E will be Object.

Page 9: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Wildcard Parametersboolean addAll(Collection<? extends E> c);

? represents an unknown type

List<?> list = new ArrayList<String>();

Not legal:

List<Object> list = new ArrayList<String>();

Would allow list.add( new Object() );

Page 10: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Bounded Type Parametersboolean addAll(Collection<? extends E> c);

Constrains possible actual types

An actual type must be same as E or extend E

Can also constrain to implement multiple interfaces

Page 11: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Parameterized Methods<T> T[] toArray(T[] a);

Infers the actual type from the actual parameter passed to the method.

Page 12: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Type Erasure

• Insures backwards compatibility

• Avoids bloat ala C++ templates

• Type information still available through reflection

Page 13: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Small Examplepublic static void main ( String... args ) {

Collection<String> strs = new ArrayList<String>();

for ( String s : args )

strs.add( s );

Collection<?> readonly = new ArrayList<String> ( strs );

//readonly.add( "some string" ); Not allowed

Collection<String> copy = new ArrayList<String> (strs);

String[] strAry = strs.toArray( new String[] {} );

}

Page 14: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Auto-boxing/unboxing

List<Integer> ints = new ArrayList<Integer>();

ints.add( 1 ); // auto-boxing to new Integer( 1 )

ints.add( 2 );

ints.add( 3 );

for ( int num : ints ) // Auto-unboxing using obj.intValue()

System.out.println( num );

Page 15: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Enhanced for loop (foreach)

• Improves readability

• Reduces boilerplate code

• Works with both arrays and objects that expose an iterator

Page 16: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Enumerated Types• Collects related constants into own

namespace

• Codifies the type-safe enum idiom

• Can have constructors, fields and methods

• Can subclass

• Works well with switch statements

• Adds enum keyword to language. May require source changes before compiling with 1.5 compiler. Existing classes should still work.

Page 17: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Enum exampleenum Suit {clubs, diamonds, hearts, spades}

enum Rank {deuce, three, four, five, six, seven,

eight, nine, ten, jack, queen, king, ace}

List<Card> deck = new ArrayList<Card>();

for (Suit suit : Suit.VALUES)

for (Rank rank : Rank.VALUES)

deck.add(new Card(suit, rank));

Collections.shuffle(deck);

Page 18: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Switch with EnumColor getColor( Suit suit ) {

switch( suit ) {

case clubs:

case spades: return Color.Black;

case diamonds:

case hearts: return Color.Red;

default: throw new AssertionError( suit + “ not valid value” );

}

}

Page 19: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Variable ArgumentsString format( String format, Object... args );

format(“{2} {1}!”, “World”, “Hello”);

• Nicer way to call a method that takes an array of some type

• Class…means Class[] inside of the method

• Use the enhanced for loop to iterate

Page 20: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Static Importimport static java.lang.math.*;

int themax = max( 123123, 23475 );

• Reduces typing

• Alleviates need for implementing a Constant Interface

• Compiler error if names clash

Page 21: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

Meta-data• Available at compile-time or runtime with

reflection

• Similar concept to XDoclet tags or .Net attributes

• @deprecated and @overrides are standard

Page 22: New features in JDK 1.5 Can these new and complex features simplify Java development? dave@marquam.org.

References

Java Generics Tutorialhttp://java.sun.com/j2se/1.5/pdf/generics-tutorial.pdf

J2SE 1.5 in a Nutshell http://java.sun.com/developer/technicalArticles/releases/j2se15

A Conversation with Joshua Bloch http://java.sun.com/features/2003/05/bloch_qa.html

What's new in J2SE 1.5http://wiki.schubart.net/wiki/wiki.phtml?title=What's_new_in_J2SE_1.5

David Flanagan Web loghttp://www.davidflanagan.com/