Download Lecture slides

yes no Was this document useful for you?
   Thank you for your participation!

* Your assessment is very important for improving the work of artificial intelligence, which forms the content of this project

Document related concepts

Go (programming language) wikipedia, lookup

Object-oriented programming wikipedia, lookup

C Sharp (programming language) wikipedia, lookup

C++ wikipedia, lookup

C Sharp syntax wikipedia, lookup

Java performance wikipedia, lookup

Class (computer programming) wikipedia, lookup

Java (programming language) wikipedia, lookup

Design Patterns wikipedia, lookup

Name mangling wikipedia, lookup

C syntax wikipedia, lookup

One-pass compiler wikipedia, lookup

Scala (programming language) wikipedia, lookup

Resource management (computing) wikipedia, lookup

Java syntax wikipedia, lookup

Covariance and contravariance (computer science) wikipedia, lookup

Smalltalk wikipedia, lookup

Dependency injection wikipedia, lookup

Generic programming wikipedia, lookup

CSC 243 – Java Programming,
Spring 2014
March, 2014
Week 7ish, Generics
Generic Interfaces / Classes
• We have been using generic interfaces and
classes from the library.
• java.util.Set<E>, java.util.HashSet<E>
• java.util.Map<K,V>, java.util.HashMap<K,V>
• They allow containers to contain different
types (classes) of objects.
• Generic parameters such as E (element type),
K (key type) and V (value type) above are
types bound by client code at compile time.
Using Generic Classes
• Client code supplies a binding for each generic
parameter that must be an interface or class
• It cannot be a primitive type.
• A generic parameter may constrain the type of
class or interface that client code can bind
using a wildcard.
• ?, ? extends T, ? super T – details follow.
Building Generics
• A class or interface specifies its generic type.
HashSet<E>, HashMap<K, V>, etc.
? extends T is a bounded wildcard, T or a subclass
? super T is a lower-bounded wildcard, T or a superclass
? is an unbounded wildcard, same as ? Extends Object
The bound constrains client code type binding.
• The writer of a generic class must ensure type
consistency within the class.
• The user can safely assume type compatibility if the
compiler does not flag an error.
Erasure and Restrictions
• Unlike C++ template classes, the compiler
generates only 1 copy of the class code for a
generic class, erasing the generic type T
information at run time.
• Every generic type T is treated as a java.lang.Object at
run time.
• Writers of generic classes may need to cast to generic
type T, E, K, V etc. in places.
• Writers of generic classes must ensure that those casts
are valid. The compiler cannot ensure this.
• 1. No constructor – no “new T()” for generic T.
• 2. No “new T[]” – you must cast an “Object []” to a “T
[]” within the generic class code.
• This cast often fails at run time with a wildcard T. Make
sure to test if you use arrays of wildcard generic types.
• 3. No generic T in a static field, static method or
static initialization block of code.
• 4. Exception classes cannot be generic.
Non-template class topics
• java.lang.Cloneable
• Marker interface that says (to humans and tools), “Objects of
this interface provide a public clone() method.
• See java.lang.Object.clone()
• clone() returns a new copy of its object.
• Its implementation often uses a private constructor to build
the new object.
• An immutable object can return a reference to itself.
– It is like a C++ copy constructor.
– Do not clone 2D arrays. An array clone() clones only the
first dimension.
Non-template class topics
• java.util.Comparable<T>
– Specifies method int compareTo(T o).
– Returns -1, 0 or 1 if object is logically <, == or > o.
– May require redefining equals() and hashCode() in class
• Just exclusive-OR (^) the hashCodes of the fields.
• java.util.Serializable
– Useful for storing objects in binary data files or sending
them across a network.
– All fields in a Serializable object should be Serializable,
primitive types or transient.