Podjęliśmy decyzję, aby nie wdrażać metody toString
dla int[]
, ale zamiast tego pozwolić jej na dziedziczenie metody toString
z Object
?Projekt języka Java z toString
Odpowiedz
Wprowadzono bardziej uzasadnione metody toString
dla tablic. Znajdują się one w klasie java.util.Arrays
.
Co do rozumowania. Zakładam, że przez przesłonięcia dostarczone w klasie Arrays
, próba implementacji generycznego toString
dla różnych typów tablic jest albo złożona, albo niemożliwa. Metoda toString
musiałaby wiedzieć, na którym typie macierzy pracuje, i wyprowadzać dane w odpowiedni sposób. Na przykład Object[]
musi używać toString
na każdym elemencie, podczas gdy char[]
musi wyprowadzać znak, a numeryczne typy danych muszą być konwertowane na ciąg liczbowy.
Metody dostępne w Arrays
otrzymują za darmo, ponieważ typy są stałe z powodu nadpisań.
Właściwa zmiana obiektu na sensowną toString() dla tablic jest dość prosta, po prostu niezalecana. Jeszcze lepiej int [] ma swoją własną klasę i wie, że jej typ może po prostu robić to, co robi toString (int []). –
'Zmiana obiektu na sensowny toString() dla tablic'? Sugerujesz, aby poprawić kod źródłowy słońca? –
Firma Sun nieustannie aktualizuje i wydaje poprawki do kodu źródłowego, Java 6 jest aktualizowana 21. –
Sądzę, że z powodu następującego rozumowania: skąd mieliby wiedzieć, jak użytkownicy chcieliby zaprezentować swoją tablicę? Może mieć "rozmiar tablicy: 10" lub może być "[x, y, z]".
Dali ci domyślne, jeśli chcesz zrobić coś innego, co jest łatwe.
Można użyć Apache ToStringBuilder łatwiej ...
http://commons.apache.org/lang/api/org/apache/commons/lang/builder/ToStringBuilder.html
Nie tylko to, ale może być katastrofalne wywoływanie 'toString()' w tablicy zawierającej 100 000 elementów. A celem 'toString()' jest nie tylko wyświetlenie zawartości obiektu, ale także wyświetlenie czytelnej dla człowieka postaci wyświetlanej w narzędziach, debuggerach itp. –
Moje przypuszczenie byłoby to, że ponieważ obiekty Array nie zostały stworzone w kodzie źródłowym Javy przez projektantów językowych - są one tworzone przez kompilator Java. Pamiętaj, że możesz mieć tablicę dowolnego typu obiektu, więc kompilator tworzy obiekt Array odpowiednio do potrzebnego typu.
Jeśli mają stworzyć standardową metodę, nie jest od razu oczywiste, jak to powinno działać. Na przykład wykonanie toString()
i konkatenacja wyników może być OK dla małej tablicy, ale nie działa dla tablicy wielowymiarowej lub tablicy z 1000 wpisów. Więc myślę, że nie ma metody toString()
, aby zachować spójność wszystkich tablic.
Co prawda jest denerwujące i czasami wydaje mi się, że coś podobnego do linii "Array[" + size + "] of " + getClassName()
może być znacznie lepsze niż domyślne.
Pierwsza część tego, jak sądzę, uderza w to prosto w głowę. –
Trochę zgadywania tutaj, ale ...
Nie jest oczywiste, reprezentacja ciąg int tablicy. Ludzie robią to na różne sposoby: przecinki, oddzielone spacjami, ujęte w nawiasy lub nawiasy lub nic. Prawdopodobnie doprowadziło to do decyzji o niewdrażaniu go w Javie 1.1, wraz z kodem niskiego priorytetu (ponieważ każdy może zaimplementować metodę, aby napisać tablicę jako napis bardzo prosto).
Teraz nie można go zaktualizować w Javie 1.2 lub późniejszej, ponieważ mogłoby to zrekompensować kompatybilność dla każdego, kto już używa starego zachowania. Możesz jednak dodać klasę narzędziową, która implementuje niektóre funkcje, i to właśnie zrobili z java.util.Arrays.
- 1. Java: enum toString()
- 2. Swift odpowiednik Java .toString()
- 3. Statystyki języka Java
- 4. Ograniczniki Postfix języka Java
- 5. Sprawdź, czy klasy Java implementują toString()
- 6. Nowy projekt: Mam problem z wyborem języka do użycia
- 7. Przenoszenie z języka Cobol na język Java
- 8. Zastępowanie valueof() i toString() w enum Java
- 9. Czy istnieje parser Java dla języka Java?
- 10. Biblioteka SNMP dla języka Java
- 11. Kompletność definicji gramatyki języka Java
- 12. Niezgodne klasy generyczne języka Java
- 13. Edytor HTML języka Java WYSIWYG
- 14. .NET odpowiednik List.subList języka Java()?
- 15. Konwertuj projekt Java Eclipse (z folderem źródłowym java), aby ocenić projekt
- 16. Niestandardowy projekt JScollPane Java Swing
- 17. Java sterownik bazy danych projekt
- 18. Jak utworzyć projekt gradacji Java
- 19. Biblioteki śledzenia twarzy dla języka Java lub języka Python
- 20. projekt Java struktura katalogów konwencja
- 21. Wywoływanie głównej metody języka Java z parametrami z Eclipse
- 22. Android + toString
- 23. Ostrzeżenie dotyczące dziedziczenia generycznego języka Java
- 24. Biblioteka przetwarzania wideo dla języka Java
- 25. Jaśmin dla języka C# i/lub Java
- 26. Czy deterministyczny jest parametr hashCode() języka Java?
- 27. Alternatywa dla licznika Pythona dla języka Java
- 28. Czy istnieje implementacja języka R2RML z otwartym kodem źródłowym języka Java?
- 29. Jaki jest najlepszy sposób uzyskania ostatniego wstawionego identyfikatora przy użyciu języka sqlite z języka Java?
- 30. Identyfikator tabletu z systemem Android dla języka Python i Java
Jeśli potrzebujesz funkcjonalności ... wiesz o 'java.util.Arrays.toString' ...? –
@Konrad, ale jest to kiepski wybór, jeśli chodzi o użycie klasy użytkowej, po prostu pragmatycznego IMHO. –
@Peter: Nie broniłem tego. O ile mi wiadomo, Java jest * serią * złych wyborów projektowych. –