In your second case when you do:
public void processA(A a)
What do you mean by A? Does it mean A<String> or A<List<String>> or what? You might not be using anything related to type of A, but hey the compiler doesn’t know this fact. To compiler, just A is a sign of panic.
In your case, because you dont specifically need to know the type of A, you can:
public void processA(A<?> a) {
Map<Integer, String> map = a.getMap();
}
Having an argument type of A<?> means, you do not specifically care the type of A and just specify a wild card. To you it means: any object of A with any type as its generic type would do. In reality, it means you do not know the type. Its useless because you cannot do anything related to A in typesafe manner as ? can be virtually anything!
But as per your method body, it makes all the sense in the world to use A<?> because no where in the body you actually need the type of A