En .NET, tanto la matriz como la lista tienen Enumerable como antecesor, por lo que un método que acepte Enumerable como argumento puede recibir tanto la matriz como la lista como su argumento. Me pregunto si hay algo similar en Java?Ancestro común para Java Array y List
Respuesta
No, no hay ningún equivalente en Java. En general, le sugiero que diseñe métodos API para recibir List<T>
, Collection<T>
o Iterable<T>
. Si bien estos excluyen directamente llamando al método con una matriz, puede envolver una matriz muy fácilmente usando Arrays.asList
. Esto es más flexible para la persona que llama que la especificación de una matriz como parámetro de método, lo que obliga a una implementación única.
Estoy de acuerdo en que no es ideal.
Tenga en cuenta que en .NET, las matrices unidimensionales no solo implementan IEnumerable<T>
sino que también implementan IList<T>
.
Ambos derivan de java.lang.Object
. Sin embargo, esto no está relacionado con la recopilación, que creo que es lo que estás buscando.
La matriz y la lista en Java no comparten un ancestro común que no sea java.lang.Object.
Tanto se puede acceder mediante el bucle foreach, así:
String [] array = new String [] { "foo", "bar", "baz", };
List<String> list = Arrays.asList("x", "y", "z");
for (String s : array)
System.out.println(s);
for (String s : list)
System.out.println(s);
No tienen un ancestro común, sin embargo, hay métodos para emitidos entre los dos tipos según su necesidad -
por lo que podría proporcionar un sobrecargado método para convertir a un tipo común - es decir,
public void doAll(MyType[] array) {
doAll(Arrays.asList(array));
}
public void doAll(List<MyType> list) {
//... process List here.
}
Básicamente, las matrices tienen un tipo implícito que es una subclase de objeto. Ver Arrays en el JLS:
public static void main(String[] args) {
int[] ia = new int[3];
System.out.println(ia.getClass());
System.out.println(ia.getClass().getSuperclass());
}
> class [I
> class java.lang.Object
La manera matrices y listas también se manejan no es lo mismo cuando consideramos covariance/contravariance.
List<Object> l = new ArrayList<String>(); // complain
Object[] l2 = new String[1]; // ok
l2[0] = 4; // throw ArrayStoreException.
Se pone aún peor si tenemos en cuenta los genéricos, pero ese es otro tema. En general, no conozco la razón de ser de este diseño, pero tenemos que vivir con eso.
Iterable<T>
es el equivalente de Java de IEnumerable<T>
. Todas/la mayoría de las colecciones implementan esta interfaz (incluidas ArrayList
y matrices), así que sí. Pero no es un "antecesor" (que tampoco está en .NET), sino una interfaz común.
- 1. ¿Diferencias significativas en Array vs Array List?
- 2. Python numpy array vs list
- 3. Método común para comparar dos objetos Java
- 4. java: list thread locals?
- 5. Concepto XML XLST anterior-hermano y ancestro
- 6. Convertir Java Array a Iterable
- 7. ¿Cómo forzar a un ancestro común en una fusión de git?
- 8. java convert object array a int array
- 9. ¿Cómo encontrar el primer ancestro común de un nodo en un árbol binario?
- 10. Encuentra el ancestro común más reciente de dos ramas de Git
- 11. cómo convertir 2d list a 2d numpy array?
- 12. ¿Qué es mejor usar array o List <>?
- 13. Multi-Dimension length array array java
- 14. ¿Cuál es la diferencia entre IEnumerable y Array, IList y List?
- 15. ¿Por qué SortedList y List usan array y por qué LinkedList no se usa mucho?
- 16. Java API para convertir Array en CSV
- 17. ¿Cómo funciona Java List size()?
- 18. Java array of Hashtables
- 19. Java LinkedList a matlab array
- 20. Java Jagged Array
- 21. Java Array Orden descendente?
- 22. Diseño común para consola y GUI
- 23. nodo ancestro más cercano en jQuery
- 24. Vinculando a un ancestro en WPF
- 25. ¿Cuál es la diferencia entre Collection y List en Java?
- 26. Diferencia entre array [n] y array []?
- 27. HTTPclient común y proxy
- 28. Java Convert Array a los parámetros
- 29. String to Char array Java
- 30. Java int ... notación de array
Haciendo que mis idiomas se confundan - he estado leyendo C# últimamente. – duffymo