Jakiś konkretny powód dlaczego `String.format()` jest `static`?

Jakiś konkretny powód dlaczego `String.format()` jest `static`?
Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0

Nie mam żadnego problemu, tylko raczej pytam z ciekawości. Jakoś inne metody, replace(), split() etc. mogą być instance metodami, czemu format() nie?

I raczej nie jestem zainteresowany opiniami - widziałem już 30 pytań z setkami odpowiedzi w których właśnie były same opinie, i żadnego sensownego powodu.

Jak już wspomniałem, pytam z ciekawości.

Michał Sikora
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Kraków
  • Postów: 834
1

Póki co jest to bug - https://bugs.java.com/bugdatabase/view_bug.do?bug_id=7056478. Jak odrzucą to może napiszą czemu. :)

stivens
  • Rejestracja: dni
  • Ostatnio: dni
0

Czyli nie ma dobrego powodu

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
lion137 napisał(a):

https://stackoverflow.com/questions/792259/why-is-strings-formatobject-args-defined-as-a-static-method

Rozumiem że wklejając ten link tutaj wypowiadasz się przytaczając pytanie/odpowiedzi ludzi tam wypowiadających się?

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
lion137 napisał(a):

To chyba oczywiste.

Więc konkretnie pod którą z tych odpowiedzi się podpisujesz? Bo nie mogę tego wychwycić :)

jarekr000000
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: U krasnoludów - pod górą
  • Postów: 4712
3

Myślę, że nie ma żadnego uzasadnienia. Tak po prosto wyszło. Ktoś, kto to robił, miał akurat jakiś statyczny dzień. IMO nie jest to ani specjalnie źle, ani dobrze.
Nie wszytko co ludzie robią jest jakoś mocno przemyślane i to nie znaczy, że jest złe.

Dla kontrastu: całe java.util.Date i Calendar jest bardzo mocno przemyślane. Tylko, że fatalnie.

somekind
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
0
TomRiddle napisał(a):

Nie mam żadnego problemu, tylko raczej pytam z ciekawości. Jakoś inne metody, replace(), split() etc. mogą być instance metodami, czemu format() nie?

Strzelam, że to dlatego, że printf nie jest instancyjny.
I myślę, że by to bardzo dziwnie wyglądało. Ale pewnie kwestia przyzwyczajenia.

Riddle
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 10227
0
somekind napisał(a):
TomRiddle napisał(a):

I myślę, że by to bardzo dziwnie wyglądało. Ale pewnie kwestia przyzwyczajenia.

Ja bym w sumie wolał "You %s are %s".format("twat", "heck")

Wibowit
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: XML Hills
0

W Javie printf jest metodą na obiekcie typu PrintStream.

Najbardziej przekonujący (nie mylić z sensownym) jest chyba argument o przeciążaniu (przeciążanie = rak). Ktoś bardzo chciał przeciążyć format tak by jedna z wersji tej metody brała dodatkowe Locale, a druga nie, więc zrobienie statycznej metody format rozwiązało sprawę. W .NETu jest podobnie tylko zamiast Locale jest IFormatProvider.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.