Next we’ll get more practice working with interfaces.
We’ll move past our friend Comparable and look at two new Java interfaces that allow us to integrate with a built-in language feature—the enhanced for loop.
Super cool!
Let’s go…
Iterable and IteratorIterable and IteratorNow let’s have more fun with interfaces.
Remember the enhanced Java for loop:
So it turns out that we can implement our own classes that can be used in the enhanced for loop.
Pretty cool!
Let’s look at the interfaces that are required and consider how they work.
We’ll examine them both at once, since they are really designed to work together:
Now let’s put what we know to use to build a simple random number generator.
We’ll create a class that can be used on the right side of a for loop and generates a certain number of random int values.
Next, let’s look at a few improvements to our iterable random number generator based on what we’ve already done.
Create a public class named MyString.
MyString should provide a public constructor that accepts a single String argument.
You should reject null Strings in your constructor using assert.
MyString should also implement the Java Comparable<MyString> interface, returning 1 for a positive result and -1
for a negative result.
Normally Strings are compared lexicographically: "aaa" comes before "z".
MyString should compare instances based on the length of its stored String.
So MyString("aaa") should come after MyString("z"), since "aaa" is longer than "z".
You will probably need to review the documentation for Comparable.
Because we are using the type parameter MyString to the Comparable interface, compareTo accepts an
MyString as an argument.
The MyString passed to compareTo will not be null.
Create a class named BothGreater that stores two int values set by the constructor.
Neither should be publicly visible.
BothGreater should also implement the Java Comparable<BothGreater> interface, returning 1 for a positive result
and -1 for a negative result.
An instance of BothGreater is greater than a second instance if both int values are larger, and is lesser
than if both int values are smaller.
Otherwise compareTo should return 0.
The instance passed to compareTo will not be null.
You will probably need to review the documentation for Comparable.
Because we are using the type parameter BothGreater to the Comparable interface, compareTo accepts an
BothGreater as an argument.
Need more practice? Head over to the practice page.