W .NET zarówno tablica, jak i lista mają Enumerable jako element nadrzędny, więc metoda, która akceptuje Enumerable jako argument, może otrzymać zarówno tablicę, jak i listę jako jej argument. Zastanawiam się, czy jest coś podobnego w Javie?Wspólny przodek do tablicy Javy i listy
Odpowiedz
Nie, nie ma odpowiednika w języku Java. Generalnie sugerowałbym zaprojektowanie metod API do otrzymywania List<T>
, Collection<T>
lub Iterable<T>
. Chociaż wykluczają one metodę z tablicą, można bardzo łatwo owijać tablicę, używając Arrays.asList
. Jest to bardziej elastyczne dla osoby dzwoniącej niż określanie tablicy jako parametru metody, która wymusza pojedynczą implementację.
Zgadzam się, że nie jest to idealne rozwiązanie.
Należy pamiętać, że w .NET jednowymiarowe tablice nie tylko implementują IEnumerable<T>
- implementują także IList<T>
.
Obie pochodzą z java.lang.Object
. Jednak nie jest to związane z kolekcją, ale myślę, że tego właśnie szukasz.
Tablica i lista w Javie nie mają wspólnego przodka innego niż java.lang.Object.
Zarówno można uzyskać za pomocą pętli foreach, tak:
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);
Oni nie mają wspólnego przodka, jednak istnieją sposoby na rzucenie pomiędzy tymi dwoma typami, ile potrzeba -
Więc można zapewnić przeciążony metoda odlewania na typ zwykły - tj.
public void doAll(MyType[] array) {
doAll(Arrays.asList(array));
}
public void doAll(List<MyType> list) {
//... process List here.
}
Zasadniczo tablice mają niejawny typ będący podklasą obiektu. Zobacz Arrays w 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
Sposób macierze i listy są obsługiwane również nie jest to samo, gdy weźmiemy pod uwagę covariance/contravariance.
List<Object> l = new ArrayList<String>(); // complain
Object[] l2 = new String[1]; // ok
l2[0] = 4; // throw ArrayStoreException.
Jeszcze gorzej, jeśli weźmiemy pod uwagę leki generyczne, ale to już inny temat. Podsumowując, nie znam racjonalności tego projektu, ale musimy z tym żyć.
Iterable<T>
to odpowiednik Javy w wersji IEnumerable<T>
. Wszystkie/większość kolekcji implementuje ten interfejs (w tym ArrayList
i tablice), więc tak. Ale to nie jest "przodek" (którego nie ma w .NET), ale wspólny interfejs.
- 1. Znajdź najnowszy wspólny przodek dwóch gałęzi Git
- 2. Pojęcie XML XLST poprzedzające-rodzeństwo i przodek
- 3. Właściwość listy LINQ do tablicy?
- 4. CSS Rodzic/Przodek Selector
- 5. Suma wszystkich elementów tablicy tablic Javy
- 6. Powracanie tablicy C do Javy przy użyciu JNA
- 7. Dostęp do Javy Javy z Delphi
- 8. Maksymalna liczba wymiarów w tablicy Javy
- 9. Indeks elementu w tablicy przy użyciu Javy
- 10. JRuby i obiektów Javy
- 11. Konwertowanie listy obiektów do tablicy json
- 12. Błąd: Przypisywanie do tablicy z listy inicjatora
- 13. PHP DOM: parsowanie listy HTML do tablicy?
- 14. Wstawianie zmiennej do zapytania SQL z Javy
- 15. Ninject Bind Kiedy przodek typ T
- 16. Tworzenie tablicy strukturalnej z listy
- 17. Znajdź najdłuższy wspólny przedrostek?
- 18. C++ uwikłany wspólny wskaźnik
- 19. jQuery - Zachowanie tablicy js i listy obiektów DOM w zsynchronizowaniu?
- 20. Najdłuższy wspólny prefiks za pomocą bufora?
- 21. Nieprawidłowe zachowanie Javy w instancji Javy
- 22. Czy istnieje bezpieczny sposób pobrania Javy Javy?
- 23. Pętla javascript przez elementy listy i zwracają wyniki w tablicy
- 24. wspólny rysunek/rysowanie na żywo
- 25. C# znaleźć największy wspólny dzielnik
- 26. Zasoby do porównywania Javy z Objective-C (składnia i podstawy)
- 27. Przekazywanie tablicy lub listy do @ Zmienna_patrzna - wiosna/Java
- 28. Dodawanie elementu do tablicy listy 2d w java
- 29. pobieranie wszystkich zmiennych statycznych z klasy do tablicy/listy
- 30. Największy wspólny dzielnik w Clojure
Moje języki są zdezorientowane - ostatnio czytałem C#. – duffymo