Есть ли в Java аналог C ++ struct
:
struct Member {
string FirstName;
string LastName;
int BirthYear;
};
Мне нужно использовать свой собственный тип данных.
Ответы:
В Java определенно нет структур :) Но то, что вы здесь описываете, похоже на класс JavaBean.
inline class
в какой-то момент в ближайшем будущем она будет больше похожа на структуру.
Эквивалент структуры в Java будет
class Member
{
public String FirstName;
public String LastName;
public int BirthYear;
};
и нет ничего плохого в этом при правильных обстоятельствах. Во многом то же самое, что и в C ++, когда вы используете структурные стихи, когда используете класс с инкапсулированными данными.
На самом деле структура в C ++ - это класс (например, вы можете определять там методы, ее можно расширять, она работает точно так же, как класс), единственная разница в том, что модификаторы доступа по умолчанию установлены на public (для классов они установлены как частные по умолчанию).
Это действительно единственное отличие C ++, многие этого не знают. ; )
Java не имеет аналога структурам C ++, но вы можете использовать классы со всеми общедоступными членами.
public
, почему бы просто не оставить их как минимум внутри пакета? Подобные классы обычно не подходят для использования в API (если только для возможных null
ссылок). Всегда используйте минимальную видимость!
В Project JUnion вы можете использовать структуры в Java, аннотируя класс аннотацией @Struct.
@Struct
class Member {
string FirstName;
string LastName;
int BirthYear;
}
Больше информации на сайте проекта: https://tehleo.github.io/junion/
Да, в Java еще нет типа структура / значение. Но в следующей версии Java мы собираемся получить inline class
структуру, аналогичную структуре в C #, которая поможет нам написать код без выделения памяти.
inline class point {
int x;
int y;
}
Структуры "действительно" чистые не поддерживаются в Java. Например, C # поддерживаетstruct
определения, которые представляют значения и могут быть выделены в любое время.
В Java - уникальный способ приблизиться к структурам C ++.
struct Token
{
TokenType type;
Stringp stringValue;
double mathValue;
}
// Instantiation
{
Token t = new Token;
}
без использования (статического буфера или списка) делает что-то вроде
var type = /* TokenType */ ;
var stringValue = /* String */ ;
var mathValue = /* double */ ;
Итак, просто выделите переменные или статически определите их в класс.
Вместе с Java 14 он начинает поддерживать запись. Вы можете проверить это https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/lang/Record.html
И после Java 15 есть запечатанные классы. Https://openjdk.java.net/jeps/360
firstName
,lastName
иbirthYear
(илиyearOfBirth
конечно).