user1308908
user1308908

Reputation:

Java generics - generic method doesnt compile

Hi I have a class SomeClass and a private map that I want to have in values list of objects A and B where B extends A.

The below code doesnt compile.. I cant change anything in class name, it must be left like:

public class SomeClass {
<T extends ParentObject> Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = new HashMap<>();
}

Upvotes: 0

Views: 68

Answers (4)

D. Rakov
D. Rakov

Reputation: 338

It depends on java version which u are using. If u are using java 1.7 or higher, then u can use:

 public class SomeClass<T extends ParentObject>  {
        Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = 
                               new HashMap<>();
    }

If u have 1.6 or earlier, then:

   public class SomeClass<T extends ParentObject>  {
        Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = 
                               new HashMap<SignedOperationNameEnum, List<T>>();
    }

To introduce method with generics just write:

private <T extends ParentObject> Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap() {
    return new HashMap<>();
}

Upvotes: 0

QuakeCore
QuakeCore

Reputation: 1936

I believe the problem is in the types you are using for instance this code which is very similar to yours compiles and runs perfectly on 1.7.

public class SomeClass {

    static <T extends Number> Map<Integer, List<T>> operationToOrderStateSkipSignatureSetMap() {
        return null;

    }

    public static void main(String[] args) throws IOException {
        System.out.println(operationToOrderStateSkipSignatureSetMap());
    }
}

Upvotes: 0

codeaholicguy
codeaholicguy

Reputation: 1691

You should change your code to:

public class SomeClass<T extends ParentObject> {
    Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = new HashMap<>();
}

Upvotes: 0

Suren Srapyan
Suren Srapyan

Reputation: 68685

After class's name definiton

public class SomeClass<T extends ParentObject>  {
Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = new HashMap<>();
}

Upvotes: 1

Related Questions