Я думаю, что лучший матч в Java List<?>
будет C# 4.0 IEnumerable<out T>
Если у вас есть метод, который принимает List<?>
, чем вы можно назвать с List<Object>
и List<String>
так:
List<Object> objList = new List<Object>();
List<String> strList = new List<String>();
doSomething(objList); //OK
doSomething(strList); //OK
public void doSomething(List<?> theList) {
///Iterate through list
}
C# 4.0 IEnumerable<T>
интерфейс на самом деле IEnumerable<out T>
, что означает, что, если, скажем, R
происходит от T
, IEnumerable<T>
может быть от IEnumerable<R>
.
Таким образом, все, что вам нужно сделать, это сделать свой doSomething
в DoSomething
и есть принять IEnumerable<T>
параметр:
List<Object> objList = new List<Object>();
List<String> strList = new List<String>();
DoSomething(objList); //OK
DoSomething(strList); //OK
public void DoSomething<T>(IEnumerable<T> theList) {
///Iterate through list
}
EDIT: Если C# 4.0 не доступен, вы всегда можете упасть обратно либо нетипизированным IEnumerable
или IList
.
Вопрос в том, это действительно хорошая идея, или вам будет лучше с безопасностью типа? –
Список
Было бы неплохо иметь какой-то контекст ... где и для чего используется это заявление? –