Хотя я не могу предложить решение Java, вот некоторые для C # ...
Если вы можете изменить сигнатуру Process для принятия IEnumerable ...
public void Process(IEnumerable<A> myList) { ... }
тогда, в C # 4.0, все будет просто работать, благодаря улучшенной поддержке ко- и противоречивости.
Если вы работаете в C # 3.0, вы можете ввести в метод параметр общего типа:
public void Process<T>(List<T> myList) where T : A { ... }
Затем вы можете вызвать передачу либо List, либо List, и параметр универсального типа будет связываться соответствующим образом. Обратите внимание, что вам не нужно указывать его напрямую, так как вывод типа обычно даст вам то, что вам нужно.
Если это не подходит, вы можете преобразовать Список, используя метод расширения Cast
из Enumerable:
public void Process(List<A> myList) { ... }
var someList = getListA1();
Process( someList.Cast<A>());