Forums Register Login

Question on using return value and not.

1
+Pie Number of slices to send: Send
In K&B book, there's a question like below:
Given that CharSequence is an interface implemented by both the String and StringBuilder classes, and then given the following method:

public <S extends CharSequence> S foo(S s) {
// INSERT HERE
}

Which of th following can be inserted at //INSERT HERE to compile and run without error?

A : return s;
B : return (Object) s;
C : return s.toString();
D : return new StringBuilder(s);
E : return (S) new StringBuilder(s);
F : return null;

Answer : A and F.

I'm not sure whether D is correct, so I wrote the code below:



Line 4 runs method foo(), no problem; Line 5 prints foo()'s return value, an exception is thrown:
Exception in thread "main" java.lang.ClassCastException: java.lang.StringBuilder cannot be cast to java.lang.String
at Test.main(Test.java:5)

I think both Line 4 and 5 should throw exceptions. Could someone explain to me why there's no exception at Line 4?
Thanks.
+Pie Number of slices to send: Send
The option "D" is wrong because you are hard-coding the return type where it could be String or StringBuilder based on the argument passed.

Line 4 and Line 5 compile and don't throw any exceptions because they are instances of CharSequence
+Pie Number of slices to send: Send
Hi harsha ,

i have tried this code it does throw exception at line 5 .
Arthur, where are your pants? Check under this tiny ad.
a bit of art, as a gift, that will fit in a stocking
https://gardener-gift.com


reply
reply
This thread has been viewed 944 times.
Similar Threads
Generics Doubt
S extends CharSequence
Doubt in Generics. pl help
Generic question
Generics return type
More...

All times above are in ranch (not your local) time.
The current ranch time is
Mar 28, 2024 03:59:46.