Wenn man sich in die Umsetzung von beispielsweise Boolean::getBoolean
Sie werden feststellen, dass der Wrapper-Typ einfach etwas Bequemlichkeit bieten System::getProperty
zum Lesen:
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"));
}
Das oben beschriebene Verfahren nur eine Bequemlichkeit ist eine typisierte Eigenschaft oder eines für das Abrufen Standardwert, wenn der angegebene Wert unzulässig ist.
Nach meinem Wissen bieten nur die Wrapper-Typen,, und Integer
solche Methoden an. (Der String
Typ ist zum Beispiel not offer such a method, anders als durch Ihre Frage impliziert. ') Die rationale ist wahrscheinlich die Tatsache, dass diese primitiven Typen für Eigenschaften, die als eine Systemeigenschaft übergeben werden, üblich sind. Sie würden beispielsweise normalerweise nicht verlangen, dass ein Benutzer eine XML-Struktur über die Befehlszeile anbietet, um nur ein Beispiel zu nennen.
Das Lesen einer Systemeigenschaft ist eine Anforderung, die über die gesamte Java-Klassenbibliothek verteilt ist. Man hätte ähnliche Convenience-Methoden in ein internes Paket einbauen können, aber ich denke, dass die Autoren der JDK-Bibliotheken dies als eine Anforderung betrachteten, die auch für Benutzer außerhalb der JCL relevant sein sollte, und sie öffentlich gemacht haben. Am Ende sollen die Wrappertypen etwas Bequemlichkeit für den Umgang mit Primitiven bieten. Ich würde keinen besseren Ort als die Wrapper-Typen kennen, um diese Methoden zu verwenden.
Wie von Pablo hervorgehoben, werden Dezimalwerte nicht als guter Wert für eine Befehlszeileneigenschaft betrachtet, da das Dezimaltrennzeichen länderabhängig ist. Außerdem kann ich nicht an eine solche Eigenschaft denken, die in der JCL verwendet wird. Dies würde erklären, warum eine ähnliche Methode von Float
und Double
fehlt. Auch weil byte
, short
und char
bei int
s zur Laufzeit dargestellt werden, würde ich keinen besonderen Anwendungsfall für diese Werte sehen, was ihre Abwesenheit erklären würde.
Ich habe mich immer gefragt, warum Boolean, Integer und Long diese Methoden haben, da sie sich nicht wirklich auf die Funktion ihrer zugeordneten Klassen beziehen. Ich vermute, sie sind Unfälle der Geschichte und würden nicht zur Verfügung gestellt, wenn es von Grund auf neu gemacht würde. Sie gehören wirklich in System oder in einer separaten Properties-Klasse. –
@HotLicks Genau meine Gedanken. Diese Methoden sind den falschen Klassen zugeordnet und werden fälschlicherweise benannt. –