Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Question 1. Consider the following classes:public class AnimalHouse<E> { private E animal; public void setAnimal(E x) { animal = x; } public E getAnimal() { return animal; } } public class Animal{ } public class Cat extends Animal { } public class Dog extends Animal { }For the following code snippets, identify whether the code:
- fails to compile
- compiles with a warning
- generates an error at runtime
- none of the above (compiles and runs without problem)
Question 1a. AnimalHouse<Animal> house = new AnimalHouse<Cat>();Answer 1a: 1. fails to compileAnimalHouse<Cat> and AnimalHouse<Animal> are not compatible types, even thoughCat
is a subtype ofAnimal
.
Question 1b. AnimalHouse<Cat> house = new AnimalHouse<Animal>();Answer 1b: 1. fails to compileSame as 1a: AnimalHouse<Cat> and AnimalHouse<Animal> are not compatible types, even thoughCat
is a subtype ofAnimal
.
Question 1c. AnimalHouse<?> house = new AnimalHouse<Cat>(); house.setAnimal(new Cat());Answer 1c: 1. fails to compileWhile the first line is acceptable it is OK to define an instance of unknown type the compiler doesn't know the type of animal stored inhouse
so thesetAnimal
method cannot be used.
Question 1d. AnimalHouse house = new AnimalHouse(); house.setAnimal(new Dog());Answer 1d: 2. compiles with a warningThe compiler doesn't know what typehouse
contains. It will accept the code, but warn that there might be a problem when setting the animal to an instance ofDog
.Using a generic type as a raw type might be a way to work around a particular compiler error, but you lose the type checking that generics provides, so it is not recommended.
Exercise 1. Write an example that sorts a set of predefined strings based on string length. Use the version of theCollections.sort
method that takes aComparator
parameter.
Answer 2. Here are two versions an example calledFoodSort
:This second version ofimport java.util.*; public class FoodSort { static class CompareFoodStrings implements Comparator<String> { //This Comparator sorts based on string length. public int compare(String o1, String o2) { return o1.length() - o2.length(); } } public static void main(String[] args) { String[] foodStrings = {"cheese pizza", "aloo gobi", "samosa", "enchilada", "lasagna", "minestrone", "manicotti", "ziti", "burrito", "chocolate"}; List<String> foods = Arrays.asList(foodStrings); Comparator<String> comp = new CompareFoodStrings(); Collections.sort(foods, comp); for (String s : foods) { System.out.println(s); } } }FoodSort
implements the comparator as an anonymous inner class:import java.util.*; public class FoodSort { public static void main(String[] args) { String[] foodStrings = {"cheese pizza", "aloo gobi", "samosa", "enchilada", "lasagna", "minestrone", "manicotti", "ziti", "burrito", "chocolate"}; List<String> foods = Arrays.asList(foodStrings); //This Comparator sorts based on string length. Collections.sort(foods, new Comparator<String>() { public int compare(String o1, String o2) { return o1.length() - o2.length(); } }); for (String s : foods) { System.out.println(s); } } }
Start of Tutorial > Start of Trail > Start of Lesson |
Search
Feedback Form |
Copyright 1995-2005 Sun Microsystems, Inc. All rights reserved.