Choice:
A. List<? extends InputStreamReader> list = new LinkedList<FileReader>();
B. Collection<? super BufferedOutputStream> c = new Deque<OutputStream>();
C. Set<? extends FilterOutputStream> s = new TreeSet<BufferedOutputStream>();
D. Queue<?> queue = new PriorityQueue<Object>();
E. Queue<? super PrintWriter> queue = new LinkedBlockingQueue<Writer>();
F. Map<? extends OutputStreamWriter, ? super PrintStream> map = new HashMap<PrintWriter, FilterOutputStream>();
G. ConcurrentMap<? extends InputStreamReader, ? super OutputStreamWriter> c = new ConcurrentHashMap<FileReader, Writer>();
H. List<? extends InputStream> list = new CopyOnWriteArrayList<FileInputStream>();
Explain: A is correct, FileReader is a subclass of InputStreamReader. B is incorrect, Deque is an interface, which can not be instantiated. C is correct, TreeSet is an implementation of Set and BufferedOutputStream is a subclass of FilereOutputStream. D is correct because unbounded wildcards can stand for anything. E is correct, because LinkedBlockingQueue is an implementation of Queue from java.util.concurrent.* and Writer is a superclass of PrintWriter. F is incorrect because event though HashMap is an implementation of Map, the PrintWriter is not a subclass of OutputStreamWriter. G is correct because ConcurrentHashMap implements interface ConcurrentMap, and FileReader is a subclass of InputStreamReader and Writer is the superclass of OutputStreamWriter. H is correct because CopyOnWriteArrayList is a concurrent implementation of List.