Reputation:
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
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
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
Reputation: 1691
You should change your code to:
public class SomeClass<T extends ParentObject> {
Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = new HashMap<>();
}
Upvotes: 0
Reputation: 68685
After class's name definiton
public class SomeClass<T extends ParentObject> {
Map<SignedOperationNameEnum, List<T>> operationToOrderStateSkipSignatureSetMap = new HashMap<>();
}
Upvotes: 1