Solace Solace - 6 months ago 8
Java Question

Why can't I use the wildcard (?) as type of parameter, field, local variable, or as return type of a method?

The Oracle doc about Wildcards in generics says,

The wildcard can be used in a variety of situations: as the type of a
, field, or local variable; sometimes as a return type
(though it is better programming practice to be more specific).

I have tried all four in the following class, and got compiler errors on each one. Why? What am I doing wrong?

public class MainClass {
private ? instanceFieldWithWildCardType;//ERROR
private static ? staticFieldWithWildCardType;//ERROR

private void methodWithWildCardParam(? param) {}//ERROR

private void methodWithWildCardLocalVariable() {
? localVariableWithWildCardType;//ERROR

private ? methodWithWildCardReturnType() {//ERROR
return null;

private void methodWithWildCardParam(? param) {}//ERROR



The tutorial is terribly phrased. You cannot use a wildcard for any of the things listed. You can use a generic type with a wildcard in it for those things.

public class Example {
    ? field1;        // invalid
    List<?> field2;  // valid

    private ? method1(? param) {return param;}              // invalid
    private List<?> method2(List<?> param) {return param;}  // valid

    private void method3() {
        ? var1;        // invalid
        List<?> var2;  // valid