What is the output of the following code?
public class Main { public static void main(String[] args) { Wrapper<?> stringWrapper = new Wrapper<String>("Hello"); Object str = stringWrapper.get(); System.out.println(str); stringWrapper.set("book2s.com"); } public static void printDetails(Wrapper<?> wrapper){ System.out.println(wrapper); } } class Wrapper<T> { private T ref; public Wrapper(T ref) { this.ref = ref; } public T get() { return ref; } public void set(T a) { this.ref = a; } }
The method set(capture#2-of ?) in the type Wrapperis not applicable for the arguments (String)
The set(T a) method accepts the generic type argument.
This type, T, is not known to unknownWrapper, and therefore the compiler cannot make sure that the unknown type is a String type