Here we use a parametrized interface
Comprable<T>
. By doing so we restrict the type of the
parameter in compareTO method to T. This means that Vehicle can be
compared only to another Vehicle, since it implements
Comprable<Vehicle>. The class String in Java 5.0 implements
Comprable<String>, therefore a String can be compared only to another
String.
Here is the class Vehicle which implements Comprable<Vehicle>:
public class Vehicle implements Comparable<Vehicle> {
protected String model;
protected int maxPassengers;
protected double maxSpeed; // mph
public Vehicle(String m, int passengers, double speed) {
model = m;
maxPassengers = passengers;
maxSpeed = speed;
}
public int compareTo(Vehicle v) {
return (int) (maxSpeed - v.maxSpeed);
}
// takes distance in miles, returns time in hours
public double time(double distance) {
return distance/maxSpeed;
}
public void print() {
System.out.println("this is a " + model + ", it can carry " +
maxPassengers + " and can travel at " +
maxSpeed + " mph");
}
}
public class TestGenerics {
public static void main(String [] args) {
Vehicle [] vehicles = {new Car("Dodge",4,80.0,"automatic"),
new Airplane("Airbus",200,1000,30000),
new Vehicle ("Broom",1,100)};
Vehicle v = min(vehicles);
v.print();
String [] strings = {"orange", "banana", "apple", "lemon", "kiwi"};
String s = min(strings);
System.out.println(s);
}
public static <T extends Comparable> T min(T [] array) {
T min = array[0];
for (int i = 1; i < array.length; ++i) {
if (min.compareTo(array[i]) > 0) {
min = array[i];
}
}
return min;
}
}