Widziałem takie przykłady:
public class MaxSeconds {
public static final int MAX_SECONDS = 25;
}
i przypuszczałem, że mógłbym mieć klasę Constans do zawijania stałych, deklarując je jako statyczne końcowe. Praktycznie nie znam żadnej Javy i zastanawiam się, czy to najlepszy sposób na tworzenie stałych.
Odpowiedzi:
Jest to całkowicie do przyjęcia, prawdopodobnie nawet standard.
gdzie
TYPE
jest typ,NAME
nazwa we wszystkich wielkich literach z podkreślnikami dla spacji iVALUE
jest wartością stałą;Zdecydowanie NIE polecam umieszczać stałych we własnych klasach lub interfejsach.
Na marginesie: Zmienne, które zostały zadeklarowane jako ostateczne i można je modyfikować, można nadal zmieniać; zmienna nie może jednak nigdy wskazywać innego obiektu.
Na przykład:
Jest to zgodne z prawem i
ORIGIN
oznaczałoby punkt (3, 0).źródło
Odradzam posiadanie jednej klasy stałych. W tej chwili może się to wydawać dobrym pomysłem, ale gdy programiści odmawiają udokumentowania stałych, a klasa rośnie w górę w stosunku do 500 stałych, które w ogóle nie są ze sobą powiązane (są związane z zupełnie innymi aspektami aplikacji), to generalnie zamienia się w plik stałych, który jest całkowicie nieczytelny. Zamiast:
źródło
ZŁA PRAKTYKA polega na używaniu interfejsów tylko do przechowywania stałych (nazwanych stałym wzorcem interfejsu przez Josha Blocha). Oto, co radzi Josh:
Przykład:
Informacje o konwencji nazewnictwa:
źródło
abstract
notacji dla klasy zamiast prywatnego konstruktora.abstract
zamiast prywatnego konstruktora nie zapobiega całkowicie tworzeniu instancji, ponieważ można ją podklasować i utworzyć instancję podklasy (nie jest to dobry pomysł, ale jest to możliwe). @ToolmakerSteve Nie można podklasować klasy prywatnym konstruktorem (przynajmniej nie bez dużego złego hakowania), ponieważ konstruktor tej podklasy musi wywoływać (obecnie prywatny) konstruktor swojej nadklasy. Oznaczenie gofinal
jest więc niepotrzebne (ale być może bardziej wyraźne).W Effective Java (2. edycja) zaleca się stosowanie wyliczeń zamiast stałych int dla stałych.
Tutaj jest dobry opis wyliczeń w Javie: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html
Zauważ, że na końcu tego artykułu postawiono pytanie:
Z odpowiedzią:
źródło
Po prostu unikaj używania interfejsu:
To kuszące, ale narusza enkapsulację i zaciera rozróżnienie definicji klas.
źródło
Stosuję następujące podejście:
Niż na przykład używam
Constants.DB.Connection.URL
do uzyskania stałej. Jak dla mnie wygląda bardziej „obiektowo”.źródło
Tworzenie statycznych stałych końcowych w oddzielnej klasie może sprawić kłopoty. Kompilator Java faktycznie to zoptymalizuje i umieści rzeczywistą wartość stałej w dowolnej klasie, która się do niej odwołuje.
Jeśli później zmienisz klasę „Stałe” i nie dokonasz trudnej ponownej kompilacji na innych klasach, które odwołują się do tej klasy, skończysz z użyciem kombinacji starych i nowych wartości.
Zamiast myśleć o nich jako o stałych, pomyśl o nich jako o parametrach konfiguracyjnych i stwórz klasę do zarządzania nimi. Niech wartości nie będą ostateczne, a nawet rozważ użycie getterów. W przyszłości, gdy ustalisz, że niektóre z tych parametrów powinny być konfigurowane przez użytkownika lub administratora, będzie to o wiele łatwiejsze.
źródło
Najczęstszym błędem, jaki możesz popełnić, jest utworzenie globalnie dostępnej klasy o nazwie ogólnej, takiej jak Constants. To po prostu jest zaśmiecone śmieciami i tracisz wszelką zdolność do określenia, która część twojego systemu używa tych stałych.
Zamiast tego stałe powinny przejść do klasy, która je „posiada”. Czy masz stałą o nazwie TIMEOUT? Prawdopodobnie powinien przejść do klasy Communications () lub Connection (). MAX_BAD_LOGINS_PER_HOUR? Wchodzi w User (). I tak dalej i tak dalej.
Innym możliwym zastosowaniem są pliki .properties Java, gdy „stałe” można zdefiniować w czasie wykonywania, ale nie można ich łatwo zmienić. Możesz spakować je w pliku .jars i odwołać do nich za pomocą Class resourceLoader.
źródło
To jest właściwa droga.
Zasadniczo stałe nie są przechowywane w osobnych klasach „Stałe”, ponieważ nie można ich wykryć. Jeśli stała jest istotna dla bieżącej klasy, utrzymanie jej tam pomaga następnemu deweloperowi.
źródło
Co z wyliczeniem?
źródło
Wolę używać getterów niż stałych. Te pobierające mogą zwracać stałe wartości, np.
public int getMaxConnections() {return 10;}
Ale wszystko, co potrzebuje stałej, przejdzie przez pobierający.Jedną z korzyści jest to, że jeśli twój program przerośnie stałą - okaże się, że musi być konfigurowalny - możesz po prostu zmienić sposób, w jaki getter zwraca stałą.
Inną zaletą jest to, że aby zmodyfikować stałą, nie trzeba przekompilować wszystkiego, co z niej korzysta. Gdy odwołujesz się do statycznego pola końcowego, wartość tej stałej jest kompilowana do dowolnego kodu bajtowego, który się do niego odwołuje.
źródło
Zgadzam się, że korzystanie z interfejsu nie jest dobrym rozwiązaniem. Unikanie tego wzoru ma nawet swój własny przedmiot (# 18) w Efektywnej Javie Blocha .
Argumentem, który Bloch wysuwa przeciwko stałemu wzorcowi interfejsu jest to, że użycie stałych jest szczegółem implementacji, ale implementacja interfejsu do ich użycia ujawnia ten szczegół implementacji w eksportowanym interfejsie API.
The
public|private static final TYPE NAME = VALUE;
Wzór jest dobrym sposobem deklarowania stałej. Osobiście uważam, że lepiej unikać tworzenia osobnej klasy, w której zmieściłyby się wszystkie twoje stałe, ale nigdy nie widziałem powodu, aby tego nie robić, oprócz osobistych preferencji i stylu.Jeśli twoje stałe mogą być dobrze modelowane jako wyliczenie, rozważ wyliczenie strukturę dostępną w wersji 1.5 lub nowszej.
Jeśli używasz wersji wcześniejszej niż 1.5, nadal możesz pobierać bezpieczne wyliczenia przy użyciu normalnych klas Java. (Zobacz tę stronę ).
źródło
W oparciu o powyższe komentarze uważam, że jest to dobre podejście do zmiany staromodnej globalnej klasy stałej (zawierającej publiczne statyczne zmienne końcowe) na jej ekwiwalentny odpowiednik w następujący sposób:
Więc mogę odnieść je do:
źródło
Dobry projekt obiektowy nie powinien wymagać wielu publicznie dostępnych stałych. Większość stałych powinna być zamknięta w klasie, która potrzebuje ich do wykonania swojej pracy.
źródło
Odpowiedź na to pytanie jest pewna. Na początek, stałe w java są na ogół deklarowane jako publiczne, statyczne i końcowe. Oto powody:
Nigdy nie użyłbym interfejsu dla akcesorium / obiektu CONSTANTS po prostu dlatego, że ogólnie oczekuje się, że interfejsy zostaną zaimplementowane. Czy nie wyglądałoby to śmiesznie:
Zamiast tego wybrałbym kilka różnych sposobów, opartych na drobnych kompromisach, a więc zależy to od tego, czego potrzebujesz:
źródło
Jedno podejście, którego naprawdę powinniśmy unikać : używanie interfejsów do definiowania stałych.
Stworzenie interfejsu specjalnie do deklarowania stałych jest naprawdę najgorszą rzeczą: pokonuje powód, dla którego zaprojektowano interfejsy: definiowanie kontraktów metod.
Nawet jeśli interfejs już istnieje, aby zaspokoić określoną potrzebę, deklarowanie stałych w nich naprawdę nie ma sensu, ponieważ stałe nie powinny stanowić części interfejsu API i kontraktu udostępnianego klasom klientów.
Aby uprościć, mamy zasadniczo 4 prawidłowe podejścia .
Z
static final String/Integer
polem:Z
Java 5 enum
:TLDR: Jaki jest najlepszy sposób i gdzie zlokalizować stałe?
W większości przypadków sposób wyliczania jest prawdopodobnie lepszy niż
static final String/Integer
sposób i osobiście uważam, żestatic final String/Integer
sposób ten należy stosować tylko wtedy, gdy mamy uzasadnione powody, aby nie używać wyliczeń.Jeśli chodzi o to, gdzie powinniśmy zadeklarować wartości stałe, chodzi o sprawdzenie, czy istnieje jedna istniejąca klasa posiadająca określoną i silną spójność funkcjonalną o stałych wartościach. Jeśli znajdziemy taką klasę, powinniśmy użyć jej jako uchwytu stałych . W przeciwnym razie stała nie powinna być powiązana z żadną konkretną klasą.
static final String
/static final Integer
versusenum
Wykorzystanie wyliczeń jest naprawdę sposobem na zdecydowane rozważenie.
Wyliczenia mają wielką przewagę nad
String
lubInteger
stałe pole.Ustawiają silniejsze ograniczenie kompilacji. Jeśli zdefiniujesz metodę przyjmującą wyliczenie jako parametr, możesz przekazać tylko wartość wyliczoną zdefiniowaną w klasie wyliczeniowej (lub null).
Za pomocą String i Integer możesz zastąpić je dowolnymi wartościami zgodnego typu, a kompilacja będzie w porządku, nawet jeśli wartość nie jest zdefiniowaną stałą w polach
static final String
/static final Integer
.Na przykład poniżej dwóch stałych zdefiniowanych w klasie jako
static final String
pola:Oto metoda, która spodziewa się mieć jedną z tych stałych jako parametr:
Możesz go wywołać w ten sposób:
lub
Ale żadne ograniczenie kompilacji nie uniemożliwia wywołania go w ten sposób:
Błąd wystąpiłby tylko w środowisku wykonawczym i tylko wtedy, gdy sprawdzana jest przekazywana wartość.
W przypadku wyliczania sprawdzania nie są wymagane, ponieważ klient może przekazać tylko wartość wyliczenia w parametrze wyliczenia.
Na przykład tutaj dwie wartości zdefiniowane w klasie enum (tak stałej po wyjęciu z pudełka):
Oto metoda, która oczekuje, że jedną z tych wartości wyliczeniowych będzie parametr:
Możesz go wywołać w ten sposób:
lub
Ale kompilacja nigdy nie pozwoli ci na wywołanie jej w ten sposób:
Gdzie powinniśmy zadeklarować stałe?
Jeśli aplikacja zawiera jedną istniejącą klasę, która posiada określoną i silną spójność funkcjonalną o stałych wartościach, 1) i 2) wydają się bardziej intuicyjne.
Zasadniczo ułatwia stosowanie stałych, jeśli są one zadeklarowane w głównej klasie, która nimi manipuluje lub ma nazwę bardzo naturalną, aby zgadywać, że znajdziemy ją w środku.
Na przykład w bibliotece JDK wartości wykładnicze i stałe pi są deklarowane w klasie, która deklaruje nie tylko stałe deklaracje (
java.lang.Math
).Klienci korzystający z funkcji matematycznych często polegają na
Math
klasie. Mogą więc łatwo znaleźć stałe i mogą również pamiętać, gdzieE
iPI
są zdefiniowane w bardzo naturalny sposób.Jeśli twoja aplikacja nie zawiera istniejącej klasy, która ma bardzo specyficzną i silną spójność funkcjonalną ze stałymi wartościami, wariant 1) i wariant 2) wydają się bardziej intuicyjne.
Zasadniczo nie ułatwia użycia stałych, jeśli są one zadeklarowane w jednej klasie, która nimi manipuluje, podczas gdy mamy również 3 lub 4 inne klasy, które manipulują nimi tak bardzo, i żadna z tych klas nie wydaje się bardziej naturalna niż inne stałe wartości hosta.
W tym przypadku sensowne jest zdefiniowanie niestandardowej klasy do przechowywania tylko stałych wartości.
Na przykład w bibliotece JDK
java.util.concurrent.TimeUnit
wyliczenie nie jest deklarowane w konkretnej klasie, ponieważ tak naprawdę nie ma jednej i tylko jednej klasy JDK, która wydaje się być najbardziej intuicyjna do przechowywania:Wiele klas zadeklarowane w
java.util.concurrent
użyciu im:BlockingQueue
,ArrayBlockingQueue<E>
,CompletableFuture
,ExecutorService
, ... i tak naprawdę nikt z nich wydaje się bardziej odpowiednie do przechowywania wyliczenia.źródło
Stałą dowolnego typu można zadeklarować, tworząc niezmienną właściwość w obrębie klasy (czyli zmienną składową z
final
modyfikatorem). Zazwyczaj dostarczane są również modyfikatorystatic
ipublic
.Istnieje wiele aplikacji, w których wartość stałej wskazuje wybór spośród n-krotki (np. Wyliczenia ) wyborów. W naszym przykładzie możemy wybrać zdefiniowanie typu wyliczeniowego, który ograniczy możliwe przypisane wartości (tj. Lepsze bezpieczeństwo typu ):
źródło
Pojedyncza, ogólna klasa stałych jest złym pomysłem. Stałe powinny być zgrupowane razem z klasą, z którą są najbardziej logicznie powiązane.
Zamiast używać dowolnego rodzaju zmiennych (szczególnie wyliczeń), sugerowałbym użycie metod. Utwórz metodę o tej samej nazwie co zmienna i niech zwróci wartość przypisaną zmiennej. Teraz usuń zmienną i zastąp wszystkie odniesienia do niej wywołaniami do właśnie utworzonej metody. Jeśli uważasz, że stała jest na tyle ogólna, że nie powinieneś tworzyć instancji klasy tylko po to, aby z niej korzystać, a następnie ustaw stałą metodę na metodę klasy.
źródło
FWIW, wartość limitu czasu w sekundach powinna być prawdopodobnie ustawieniem konfiguracyjnym (wczytywanym z pliku właściwości lub poprzez wstrzyknięcie jak wiosną), a nie stałą.
źródło
Jaka jest różnica
1.
2)
i
MyGlobalConstants.TIMEOUT_IN_SECS
gdziekolwiek potrzebujemy tej stałej. Myślę, że oba są takie same.źródło
Nie nazwałbym tej samej klasy (poza obudową) co stałej ... Miałbym co najmniej jedną klasę „Ustawień”, „Wartości” lub „Stałych”, w których żyłyby wszystkie stałe. Jeśli mam ich dużą liczbę, pogrupuję je w logiczne klasy stałe (UserSettings, AppSettings itp.)
źródło
Aby pójść o krok dalej, możesz umieścić globalnie używane stałe w interfejsie, aby mogły być używane w całym systemie. Na przykład
Ale nie wdrażaj go. Po prostu odwołaj się do nich bezpośrednio w kodzie za pomocą w pełni kwalifikowanej nazwy klasy.
źródło
Dla stałych Enum jest lepszym wyborem IMHO. Oto przykład
klasa publiczna myClass {
źródło
Jednym ze sposobów, w jaki to robię, jest utworzenie klasy „Global” ze stałymi wartościami i wykonanie importu statycznego do klas, które potrzebują dostępu do stałej.
źródło
static final
zgodnie z moimi preferencjami, użyłbym tylko,enum
jeśli przedmiot był rzeczywiście wymienny.źródło
używam
static final
do deklarowania stałych i używam notacji nazewniczej ALL_CAPS. Widziałem sporo rzeczywistych przypadków, w których wszystkie stałe są powiązane w jeden interfejs. Kilka postów słusznie uznało to za złą praktykę, przede wszystkim dlatego, że nie do tego służy interfejs. Interfejs powinien egzekwować kontrakt i nie powinien być miejscem do umieszczania niepowiązanych stałych. Złożenie go razem w klasę, której nie można utworzyć również za pośrednictwem prywatnego konstruktora, jest w porządku, jeśli stała semantyka nie należy do konkretnej klasy ( es). Zawsze umieszczam stałą w klasie, z którą jest najbardziej związana, ponieważ ma to sens i jest łatwe do utrzymania.Wyliczenia są dobrym wyborem do reprezentowania zakresu wartości, ale jeśli przechowujesz autonomiczne stałe z naciskiem na wartość bezwzględną (np. TIMEOUT = 100 ms), możesz po prostu wybrać
static final
podejście.źródło
Zgadzam się z tym, co większość mówi, najlepiej używać wyliczeń, mając do czynienia z kolekcją stałych. Jeśli jednak programujesz w Androidzie, istnieje lepsze rozwiązanie: Adnotacja IntDef .
Adnotacja IntDef przewyższa wyliczenia w jeden prosty sposób, zajmuje znacznie mniej miejsca, ponieważ jest po prostu znacznikiem czasu kompilacji. To nie jest klasa, ani nie ma właściwości automatycznej konwersji łańcucha.
źródło
Cytowanie Joshua Blocha bez zrozumienia podstawowego fundamentalnego zerowego fundamentu jest ZŁYM przyzwyczajeniem i strasznie NIESAMOWITEJ praktyką .
Nic też nie czytałem Joshua Bloch, więc też
Podobnie jak w fundamentalizmie biblijnym, wszystkie prawa biblijne można podsumować
i podobnie można podsumować fundamentalizm inżynierii oprogramowania
Również wśród biblijnych kręgów fundamentalistycznych wyciąga się silny i rozsądny wniosek
Podobnie, jeśli nie szanujesz siebie jako programisty i po prostu akceptujesz wypowiedzi i proroctwa jakiegoś programistycznego guru-natha BEZ kwestionowania podstaw, twoje cytaty i poleganie na Joshua Bloch (i tym podobnych) są bez znaczenia. Dlatego w rzeczywistości nie miałbyś szacunku dla innych programistów.
Podstawowe prawa programowania oprogramowania
Stałe wzorców interfejsów to zły nawyk ???
Na podstawie jakich zasad fundamentalnie skutecznego i odpowiedzialnego programowania obejmuje ten religijny edykt?
Wystarczy przeczytać artykuł w Wikipedii na temat stałych wzorców interfejsów ( https://en.wikipedia.org/wiki/Constant_interface ), a głupie usprawiedliwienie to w stosunku do stałych wzorców interfejsu.
Whatif-No IDE? Kto na ziemi jako programista nie używałby IDE? Większość z nas to programiści, którzy wolą nie musieć dowodzić posiadania macho-estetycznego surwiwalizmu poprzez unikanie użycia IDE.
Czy zanieczyszcza przestrzeń nazw zmiennymi nieużywanymi w bieżącym zakresie? Mogą to być zwolennicy tej opinii
Używanie interfejsów do wymuszania stałych jest nadużywaniem interfejsów. Zwolennicy takich mają zły nawyk
Konwersja interfejsów na zaimplementowane klasy w przyszłości jest trudna, jeśli nie niemożliwa. Hah .... hmmm ... ???
Niezależnie od wymówek, NIE MA ŻADNEGO WYMAGANIA, jeśli chodzi o FUNDAMENTALNIE SKUTECZNĄ inżynierię oprogramowania do delegitymizacji lub ogólnie zniechęcania do stosowania stałych interfejsu.
Nie ma znaczenia, jakie były pierwotne zamiary i stany mentalne ojców założycieli, którzy opracowali Konstytucję Stanów Zjednoczonych. Moglibyśmy omówić pierwotne intencje ojców założycieli, ale obchodzą mnie tylko pisemne oświadczenia Konstytucji Stanów Zjednoczonych. I obowiązkiem każdego obywatela USA jest wykorzystanie pisemnego fundamentalizmu literackiego, a nie niepisanych założeń założycielskich, konstytucji Stanów Zjednoczonych.
Podobnie nie obchodzi mnie, jakie „oryginalne” intencje twórców platformy Java i języka programowania miały dla interfejsu. Zależy mi na efektywnych funkcjach, które zapewnia specyfikacja Java, i zamierzam w pełni wykorzystać te funkcje, aby pomóc mi w spełnieniu podstawowych praw odpowiedzialnego programowania. Nie obchodzi mnie, czy jestem postrzegany jako „naruszający intencję interfejsów”. Nie obchodzi mnie, co Gosling lub ktoś Bloch mówi o „właściwym sposobie korzystania z Javy”, chyba że to, co mówią, nie narusza mojej potrzeby SKUTECZNEGO wypełniania podstaw.
Podstawą jest normalizacja modelu danych
Nie ma znaczenia, w jaki sposób model danych jest hostowany lub przesyłany. Bez względu na to, czy używasz interfejsów, wyliczeń, czy cokolwiek innego, relacyjnego lub bez SQL, jeśli nie rozumiesz potrzeby i procesu normalizacji modelu danych.
Najpierw musimy zdefiniować i znormalizować model danych zestawu procesów. A kiedy mamy spójny model danych, TYLKO wtedy możemy wykorzystać przepływ procesów jego komponentów do zdefiniowania zachowania funkcjonalnego i proces blokuje pole lub dziedzinę aplikacji. I tylko wtedy możemy zdefiniować API każdego procesu funkcjonalnego.
Nawet aspekty normalizacji danych zaproponowane przez EF Codda są obecnie poważnie kwestionowane i poważnie kwestionowane. np. jego oświadczenie w sprawie 1NF zostało skrytykowane jako dwuznaczne, niedopasowane i nadmiernie uproszczone, podobnie jak reszta jego oświadczeń, szczególnie w związku z pojawieniem się nowoczesnych usług danych, technologii repo i transmisji. IMO, oświadczenia EF Codda powinny zostać całkowicie porzucone i należy opracować nowy zestaw bardziej matematycznie wiarygodnych stwierdzeń.
Rażącą wadą EF Codda i przyczyną jego niedopasowania do skutecznego zrozumienia przez człowieka jest jego przekonanie, że ludzko postrzegalne wielowymiarowe, zmienne wymiary można skutecznie postrzegać poprzez zestaw fragmentarycznych dwuwymiarowych mapowań.
Podstawy normalizacji danych
Czego EF Codd nie wyraził.
W ramach każdego spójnego modelu danych są to sekwencyjne stopniowane stopniowanie spójności modelu danych do osiągnięcia.
W polu lub siatce międzyobsługowych aplikacji składowych musi istnieć jeden i tylko jeden spójny model danych lub istnieje sposób na identyfikację modelu / wersji danych.
Czy nadal pytamy, czy moglibyśmy użyć stałych interfejsu? Naprawdę
Zagadnienia związane z normalizacją danych są bardziej istotne niż to przyziemne pytanie. JEŚLI nie rozwiążesz tych problemów, zamieszanie, które Twoim zdaniem powodują stałe interfejsu, jest względnie niczym. Zilch.
Na podstawie normalizacji modelu danych określa się komponenty jako zmienne, właściwości, stałe interfejsu kontraktu.
Następnie określasz, które z nich mają zostać wprowadzone do wartości, umieszczenie konfiguracji właściwości, interfejsy, końcowe łańcuchy itp.
Jeśli musisz użyć wymówki, aby łatwiej zlokalizować komponent pod kątem stałych interfejsu, oznacza to, że masz zły nawyk nie praktykowania normalizacji modelu danych.
Być może chcesz skompilować model danych w wersji vcs. Że możesz wyciągnąć wyraźnie identyfikowalną wersję modelu danych.
Wartości zdefiniowane w interfejsach są całkowicie pewne, że nie można ich modyfikować. I możliwe do udostępnienia. Po co ładować zestaw końcowych ciągów do swojej klasy z innej klasy, gdy wszystko, czego potrzebujesz, to zestaw stałych?
Dlaczego więc nie opublikować umowy na model danych? Mam na myśli to, że jeśli potrafisz to spójnie zarządzać i normalizować, dlaczego nie? ...
Teraz mogę odwoływać się do zakontraktowanych etykiet moich aplikacji w następujący sposób
To myli zawartość pliku jar? Jako programista Java nie dbam o strukturę słoika.
Czy to komplikuje zamianę środowiska uruchomieniowego motywowaną osgi? Osgi jest niezwykle skutecznym środkiem pozwalającym programistom na kontynuowanie złych nawyków. Są lepsze alternatywy niż osgi.
A dlaczego nie to? Nie ma wycieku prywatnych stałych do opublikowanej umowy. Wszystkie prywatne stałe powinny być zgrupowane w prywatny interfejs o nazwie „Stałe”, ponieważ nie chcę wyszukiwać stałych i jestem zbyt leniwy, aby wielokrotnie wpisywać „prywatny końcowy ciąg”.
Być może nawet to:
Jedyny problem ze stałymi interfejsami, który warto rozważyć, to kiedy interfejs jest implementowany.
To nie jest „pierwotna intencja” interfejsów? Tak, jakbym dbał o „pierwotną intencję” ojców założycieli w tworzeniu Konstytucji Stanów Zjednoczonych, a nie o to, jak Sąd Najwyższy interpretowałby pisane listy Konstytucji USA?
W końcu mieszkam w krainie wolnych, dzikiej i ojczyźnie odważnych. Bądź odważny, bądź wolny, bądź dziki - skorzystaj z interfejsu. Jeśli moi koledzy programiści odmawiają użycia wydajnych i leniwych środków programowania, czy zgodnie ze złotą zasadą jestem zmuszony zmniejszyć wydajność programowania, aby dostosować się do ich? Być może powinienem, ale to nie jest idealna sytuacja.
źródło