Odnosząc się do wewnętrznych zmiennych prywatnych POJO Java, które mają metody pobierające / ustawiające, użyłem następujących terminów:
- pole
- zmienna
- atrybut
- własność
Czy jest jakaś różnica między powyższymi? Jeśli tak, jakiego terminu należy użyć? Czy istnieje inny termin, którego należy użyć, gdy ta jednostka jest utrwalana?
Tak jest.
Zmienna może być lokalna, polowa lub stała (chociaż jest to technicznie błędne). Jest niejasny jak atrybut. Powinieneś także wiedzieć, że niektórzy lubią wywoływać końcowe zmienne niestatyczne (lokalne lub instancyjne)
„ Wartości ”. Prawdopodobnie pochodzi to z pojawiających się języków JVM FP, takich jak Scala.
Pole jest zazwyczaj zmienną prywatną w klasie instancji. Nie oznacza to, że istnieje metoda pobierająca i ustawiająca.
Atrybut to niejasny termin. Można go łatwo pomylić z XML lub Java Naming API. Staraj się unikać tego terminu.
Właściwość jest kombinacją pobierającą i ustawiającą.
Kilka przykładów poniżej
Kombinacji jest znacznie więcej, ale palce się męczą :)
źródło
Jeśli pytanie zostało podpowiedziane przy użyciu JAXB i chcąc wybrać właściwe
XMLAccessType
, miałem to samo pytanie. Dokument JAXB Javadoc mówi, że „pole” jest niestatyczną, trwałą zmienną instancji. „Właściwość” ma parę pobierającą / ustawiającą (więc powinna to być zmienna prywatna). „Członek publiczny” jest publiczny i dlatego prawdopodobnie jest stałą. Również w JAXB „atrybut” odnosi się do części elementu XML, jak w<myElement myAttribute="first">hello world</myElement>
.Wydaje się, że ogólnie „właściwość” Javy można zdefiniować jako pole z co najmniej funkcją pobierającą lub inną publiczną metodą, która pozwala uzyskać jej wartość. Niektórzy mówią też, że nieruchomość musi mieć setera. W przypadku takich definicji kontekst jest wszystkim.
źródło
Dietel i Dietel mają przyjemny sposób wyjaśniania pól i zmiennych.
„Razem zmienne statyczne klasy i zmienne instancji są nazywane jej polami”. (Punkt 6.3)
„Zmienne powinny być deklarowane jako pola tylko wtedy, gdy są wymagane do użycia w więcej niż jednej metodzie klasy lub jeśli program powinien zapisywać ich wartości między wywołaniami metod klasy”. (Punkt 6.4)
Zatem pola klasy są jej zmiennymi statycznymi lub zmiennymi instancji - tj. Zadeklarowanymi w zakresie klasy.
Odniesienie - Dietel P., Dietel, H. - Java ™ How To Program (Early Objects), Tenth Edition (2014)
źródło
Jeśli weźmiesz wskazówkę z Hibernate:
Hibernate odczytuje / zapisuje stan obiektu wraz z jego polem. Hibernate mapuje również właściwości stylu Java Bean na schemat DB. Hibernacja Dostęp do pól w celu załadowania / zapisania obiektu. Jeśli mapowanie jest wykonywane przez właściwość, hibernacja używa metod pobierających i ustawiających.
To właśnie hermetyzacja rozróżnia środki, w których masz metody pobierające / ustawiające dla pola i nazywa się to właściwością, dzięki czemu ukrywamy podstawową strukturę danych tej właściwości w ramach metody setMethod, dzięki czemu możemy zapobiec niepożądanym zmianom w elementach ustawiających. Wszystko, co oznacza hermetyzacja ...
Pola muszą zostać zadeklarowane i zainicjowane przed ich użyciem. Głównie do użytku wewnętrznego klasy.
Właściwości mogą być zmieniane przez ustawiającego i są one ujawniane przez metody pobierające. Tutaj cena pola ma pobierające / ustawiające wartości, więc jest to właściwość.
Podobnie używając pól , [W hibernacji jest to zalecany sposób MAP przy użyciu pól, gdzie private int id; ma adnotację @Id, ale dzięki Property masz większą kontrolę]
Dokument w języku Java mówi: Pole jest składnikiem danych klasy. Pole jest niestatyczną, trwałą zmienną instancji. Pole jest zazwyczaj zmienną prywatną w klasie instancji.
źródło
Zmienne składają się z pól i nie-pól.
Pola mogą być:
Pola niebędące polami mogą być:
Podsumowując, kluczową różnicą między zmiennymi jest to, czy są polami, czy nie, co oznacza, czy znajdują się wewnątrz metod, czy poza wszystkimi metodami.
Podstawowy przykład (przepraszam za moją składnię, jestem tylko początkującym)
źródło
W rzeczywistości te dwa terminy są często używane do reprezentowania tego samego, ale są pewne wyjątkowe sytuacje. Pole może przechowywać stan obiektu. Również wszystkie pola są zmiennymi. Jest więc jasne, że mogą istnieć zmienne, które nie są polami. Patrząc więc na 4 typy zmiennych (zmienna klasy, zmienna instancji, zmienna lokalna i zmienna parametryczna), możemy zobaczyć, że zmienne klas i zmienne instancji mogą wpływać na stan obiektu. Innymi słowy, jeśli zmienna klasy lub instancji zmienia się, zmienia się stan obiektu. Możemy więc powiedzieć, że zmienne klas i zmienne instancji są polami, podczas gdy zmienne lokalne i zmienne parametrów nie są.
Jeśli chcesz głębiej zrozumieć, możesz udać się do źródła poniżej: -
http://sajupauledayan.com/java/fields-vs-variables-in-java
źródło
Pytanie jest stare, ale inną ważną różnicą między zmienną a polem jest to, że pole otrzymuje wartość domyślną, gdy jest zadeklarowane, natomiast zmienna musi zostać zainicjowana.
źródło
Rozumiem jak poniżej i nie twierdzę, że jest to w 100% poprawne, równie dobrze mogę się mylić.
Zmienna jest coś, co deklarują, które mogą domyślnie zmian i mają różne wartości, ale może być również wyraźnie mówi się, że ostateczna. W Javie byłoby to:
Zasadniczo zmienna to wszystko, co jest zadeklarowane i może przechowywać wartości. Powyższa metoda foo zwraca na przykład zmienną .. Zwraca zmienną typu Integer, która przechowuje adres pamięci nowej Integer (); Wszystko inne, co widzisz powyżej, to także zmienne, listVariable, aFinalVariableExample i wyjaśniono tutaj:
Pole to zmienna, której zakres jest bardziej przejrzysty (lub konkretny). Zmienna powracająca z zakresu metody foo nie jest jasna w powyższym przykładzie, więc nie nazwałbym jej polem. Z drugiej strony iAmAlsoVariable jest polem „lokalnym”, ograniczonym zakresem metody foo, a listVariable jest polem „instancji”, w którym zasięg pola (zmiennej) jest ograniczony zasięgiem obiektów.
Właściwość to pole, do którego można uzyskać dostęp / zmodyfikować. Każde pole, które uwidacznia metodę pobierającą / ustawiającą, jest właściwością.
Nie znam atrybutu i chciałbym również powtórzyć, że tak rozumiem, czym są zmienne, pola i właściwości.
źródło
variable
- nazwany adres przechowywania. Każda zmienna ma typ, który definiuje rozmiar pamięci, atrybuty i zachowania. Są dla typów zmiennych Java:class variable
,instance variable
,local variable
,method parameter
field
- zmienna składowa lub członek danych. To jestvariable
wewnątrzclass
(class variable
lubinstance variable
)attribute
- w niektórych artykułach można znaleźć,attribute
że jest toobject
reprezentacjaclass variable
.Object
operuje, za pomocąattributes
którego definiuje zbiór cech.property
-field
+ ograniczonygetter/setter
. Ma składnię pola, ale używa metod pod maską.Java
nie obsługuje go w czystej postaci. Spójrz naObjective-C
,Swift
,Kotlin
Na przykład
Kotlin
próbka:[Zmienna Swift, właściwość]
źródło