Jeśli spojrzeć na realizację np Boolean::getBoolean
można zauważyć, że typy wrapper prostu oferować wygodę czytania System::getProperty
:
public static boolean getBoolean(String name) {
boolean result = false;
try {
result = toBoolean(System.getProperty(name));
} catch (IllegalArgumentException e) {
} catch (NullPointerException e) {
}
return result;
}
private static boolean toBoolean(String name) {
return ((name != null) && name.equalsIgnoreCase("true"));
}
Powyższa metoda jest tylko wygoda dla pobierania wpisane nieruchomości lub wartość domyślna, jeśli podana wartość jest niedozwolona.
Według mojej wiedzy, tylko takie typy opakowań, jak: Boolean
, Long
i Integer
oferują takie metody. (Typ String
ma na przykład not offer such a method, inne niż sugerowane przez twoje pytanie. ') Racjonalne jest prawdopodobnie to, że te prymitywne typy są wspólne dla właściwości, które są przekazywane jako własność systemu. Na przykład normalnie nie wymaga się od użytkownika oferowania struktury XML za pomocą wiersza poleceń, aby wymienić tylko jeden przykład.
Odczytanie właściwości systemowej jest wymaganiem, które jest rozłożone na całą bibliotekę klas Java. Można by umieścić podobny zestaw metod wygody w pakiecie wewnętrznym, ale myślę, że autorzy bibliotek JDK uznali to za wymóg, aby być również istotnymi dla użytkowników spoza JCL i upublicznić go. W końcu typy opakowania mają oferować pewną wygodę w radzeniu sobie z prymitywami. Nie znałbym lepszego miejsca niż typy opakowania, aby zastosować te metody.
Jak zauważył Pablo, wartości dziesiętne nie są uważane za dobrą wartość dla właściwości wiersza poleceń, ponieważ separator dziesiętny jest zależny od lokalizacji. Ponadto nie mogę myśleć o takiej właściwości używanej w JCL. To wyjaśnia, dlaczego podobnej metody nie ma w przypadku Float
i Double
. Ponadto, ponieważ byte
, short
i char
są reprezentowane w int
s w środowisku wykonawczym, nie zobaczyłbym konkretnego przypadku użycia dla tych wartości, co tłumaczyłoby ich brak.
Zawsze zastanawiałem się, dlaczego metody Boolean, Integer i Long mają te metody, ponieważ nie odnoszą się one do funkcji przypisanych do nich klas. Podejrzewam, że są to wypadki historyczne i nie zostałyby dostarczone, gdyby zostały zrobione od zera. Naprawdę należą do Systemu lub w osobnej klasie Właściwości. –
@HotLicks Dokładnie moje myśli. Te metody są przypisane do niewłaściwych klas i myląco nazwane. –