Czy Java ma odpowiednik C ++ struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Muszę użyć własnego typu danych.
java
data-structures
Dmitry
źródło
źródło
firstName
,lastName
ibirthYear
(lubyearOfBirth
oczywiście).Odpowiedzi:
Java definitywnie nie ma struktur :) Ale to, co tu opisujesz, wygląda jak klasa JavaBean.
źródło
inline class
w najbliższej przyszłości będzie miało to, co moim zdaniem bardziej przypomina strukturę.W Javie odpowiednikiem struktury byłoby
class Member { public String FirstName; public String LastName; public int BirthYear; };
i nie ma w tym nic złego w odpowiednich okolicznościach. Tak samo jak w C ++, jeśli chodzi o to, kiedy używasz wersetów struct, kiedy używasz klasy z hermetyzowanymi danymi.
źródło
Właściwie struktura w C ++ jest klasą (np. Można tam definiować metody, można ją rozszerzać, działa dokładnie jak klasa), jedyną różnicą jest to, że domyślne modyfikatory dostępu są ustawione na publiczne (dla klas są ustawione na prywatne domyślnie).
To naprawdę jedyna różnica w C ++, wiele osób o tym nie wie. ; )
źródło
Java nie ma analogii do struktur C ++, ale możesz używać klas ze wszystkimi publicznymi składnikami.
źródło
struct
w C ++ jest ( prawie ) tym samym coclass
w C ++.public
, dlaczego nie trzymać ich przynajmniej wewnątrz pakietu? Klasy takie jak ta na ogół nie nadają się do użycia w API (choćby dla możliwychnull
odniesień). Zawsze używaj minimalnej widoczności!Dzięki Project JUnion możesz używać struktur w Javie, dodając adnotacje do klasy za pomocą adnotacji @Struct
@Struct class Member { string FirstName; string LastName; int BirthYear; }
Więcej informacji na stronie projektu: https://tehleo.github.io/junion/
źródło
Tak, potrzebujesz klasy. Klasa definiuje własny typ.
źródło
Tak, Java nie ma jeszcze typu struktury / wartości. Ale w nadchodzącej wersji Java otrzymamy coś,
inline class
co jest podobne do struktury w C # i pomoże nam napisać kod bez alokacji.inline class point { int x; int y; }
źródło
Struktury „naprawdę” czyste nie są obsługiwane w Javie. Na przykład C # obsługuje
struct
definicje, które reprezentują wartości i mogą być przydzielane w dowolnym momencie.W Javie, unikalny sposób uzyskiwania przybliżenia struktur C ++
struct Token { TokenType type; Stringp stringValue; double mathValue; } // Instantiation { Token t = new Token; }
bez użycia (statycznego bufora lub listy) robi coś podobnego
var type = /* TokenType */ ; var stringValue = /* String */ ; var mathValue = /* double */ ;
Dlatego po prostu przydziel zmienne lub zdefiniuj je statycznie w klasie.
źródło
Wraz z Javą 14 zaczyna wspierać Record. Możesz sprawdzić, czy https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html
Są też klasy zapieczętowane po Javie 15. https://openjdk.java.net/jeps/360
źródło