Win a copy of Design for the Mind this week in the Design forum!
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic

K & B Generics Quiz question.

 
taichi chen
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Given a method declared as:

public static <E extends Number> List<? super E> process(List<E> nums)

A programmer wants to use this method like this:

// INSERT DECLARATIONS HERE

output = process(input);


Which pairs of declarations could be placed at // INSERT DECLARATIONS HERE to allow the code to compile? (Choose all that apply.)

Given a method declared as:

public static <E extends Number> List<? super E> process(List<E> nums)

A programmer wants to use this method like this:

// INSERT DECLARATIONS HERE

output = process(input);


Which pairs of declarations could be placed at // INSERT DECLARATIONS HERE to allow the code to compile? (Choose all that apply.)

A)ArrayList<Integer> input = null;

ArrayList<Integer> output = null;

B) ArrayList<Integer> input = null;

List<Integer> output = null;

C) ArrayList<Integer> input = null;

List<Number> output = null;

D) List<Number> input = null;

ArrayList<Integer> output = null;

E) List<Number> input = null;

List<Number> output = null;

F) List<Integer> input = null;

List<Integer> output = null;

G) None of the above.

According to the book, B, E, and F are correct.

C is wrong because the return type evaluates to List<Integer>, and that can't be assigned to a variable of type List<Number>.

I can understand Why A and D are wrong but I am confused on why C is incorrect. can anyone please explain why C is wrong? thanks!
 
Vishal Chawla
Greenhorn
Posts: 28
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
question is incorrect... refer K &B errata
 
taichi chen
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Thanks, Vishal... I got it.
 
taichi chen
Greenhorn
Posts: 5
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
The question should really be:
public static <E extends Number> List<E> process(List<E> nums)
 
  • Post Reply
  • Bookmark Topic Watch Topic
  • New Topic