Zastanawiam się ostatnio, dlaczego oba modele java.lang.Runtime
i java.lang.System
mają te same metody ładowania biblioteki, zbierania śmieci i podobnych operacji. Czy to z powodów historycznych, dla wygody, czy naprawdę różnią się one od siebie? Obie klasy są dostępne z JDK 1.0 ...Java - dlaczego klasy System i Runtime mają identyczne metody?
Odpowiedz
System ujawnia różne rzeczy, które mogą być odpowiednie dla programisty do korzystania z Systemu.
Byłbym zaniepokojony programatorem grającym bezpośrednio z Runtime. Aby system mógł wywoływać metody, muszą być odsłonięte.
System zapewnia interfejs do środowiska wykonawczego, umożliwiający dostęp do metod wykonawczych odpowiednich dla programistów. Wezwij metody systemowe i pozwól im odpowiednio delegować.
Jeśli szukasz przykładu w metodzie System#load(String)
, widzisz, że wywołuje on metodę Runtime#load(String)
. To samo dotyczy gc()
. Tak jest najprawdopodobniej ze względów historycznych.
Nie zgadzam się z argumentem historycznym. Jeśli spojrzysz na API Java 1.0, przekonasz się, że metody zawsze były obecne w System i Runtime. – Jonathan
Zgaduję (pamiętaj, to jest domysły), że metody w klasie System
są dostępne dla wygody. Na przykład: System.gc();
jest statyczna, gdzie Runtime.gc();
jest metodą instancji. Ułatwia to wywoływanie, ponieważ nie trzeba uzyskiwać instancji Runtime
.
Nie rozumiem, co chcesz wyrazić. Jeśli java nie chce, aby programiści grali bezpośrednio w Runtime, powinien to uczynić prywatnym, a nie publicznym. W rzeczywistości możemy swobodnie wywoływać metody Runtime. – Chao
@Richard Klasa wykonawcza udostępnia podstawowe środowisko JVM i OS w sposób, który może nie być przenośny. Klasa System udostępnia spójny przenośny widok JVM i systemu operacyjnego. Środowisko wykonawcze nie może być prywatne jako liczba klas, w tym System, należy je wywoływać. Istnieją również ograniczone przypadki, w których bezpośrednie odwoływanie się do metod może być właściwe. – BillThor
Masz na myśli, że zawsze powinniśmy preferować używanie klasy System, jeśli to możliwe? Metody skrótów mogą być dobrym pomysłem gdzieś, ale taki projekt interfejsu API jest naprawdę mylący. – Chao