Поддерживает ли структура Java? - PullRequest
72 голосов
/ 02 марта 2011

Есть ли у Java аналог C ++ struct:

struct Member {
  string FirstName; 
  string LastName;  
  int BirthYear; 
};

Мне нужно использовать свой собственный тип данных.

Ответы [ 7 ]

79 голосов
/ 02 марта 2011

Эквивалентом в Java структуры будет

class Member
{
    public String FirstName; 
    public String LastName;  
    public int    BirthYear; 
 };

, и в правильных обстоятельствах нет ничего плохого в этом.Практически так же, как в C ++, на самом деле, когда вы используете структурные стихи и когда используете класс с инкапсулированными данными.

42 голосов
/ 02 марта 2011

Java окончательно не имеет структур :) Но то, что вы здесь описываете, похоже на класс JavaBean.

14 голосов
/ 02 марта 2011

Java не имеет аналога структур C ++, но вы можете использовать классы со всеми открытыми членами.

7 голосов
/ 21 декабря 2017

На самом деле структура в C ++ - это класс (например, вы можете определить методы там, он может быть расширен, он работает точно так же, как класс), единственное отличие состоит в том, что модификаторы доступа по умолчанию установлены на public (для классов они являютсяпо умолчанию установлено в private).

Это действительно единственное отличие в C ++, многие люди этого не знают.;)

6 голосов
/ 02 марта 2011

Да, класс - это то, что вам нужно.Класс определяет собственный тип.

3 голосов
/ 25 апреля 2018

С Project JUnion вы можете использовать структуры в Java, аннотируя класс аннотацией @Struct

@Struct
class Member {
  string FirstName; 
  string LastName;  
  int BirthYear; 
}

Подробнее на сайте проекта: https://tehleo.github.io/junion/

2 голосов
/ 06 апреля 2018

Структуры "действительно" чистые не поддерживаются в 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 */ ;

Итак, просто выделите переменные или статически определите их в классе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...