web-dev-qa-db-ja.com

Javaは構造体をサポートしますか?

JavaはC++ structに類似していますか:

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

独自のデータ型を使用する必要があります。

76
Dmitry

Javaには間違いなく構造体がありません:)しかし、ここで説明するのはJavaBeanクラスのように見えます。

45
Heiko Rupp

Javaの構造体に相当するものは

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

そして、適切な状況ではそれで何も悪いことはありません。カプセル化されたデータを持つクラスをいつ使用するかという点で、実際にC++の場合とほぼ同じです。

81
Tom Quarendon

JavaにはC++の構造体に類似したものはありませんが、すべてのパブリックメンバーでクラスを使用できます。

14
Eugene Burtsev

実際、C++の構造体はクラスです(たとえば、そこでメソッドを定義でき、拡張でき、クラスとまったく同じように機能します)、唯一の違いは、デフォルトのアクセス修飾子がpublicに設定されていることです(クラスがprivateに設定されている場合)デフォルトで)。

これは本当にC++の唯一の違いであり、多くの人はそれを知りません。 ; )

7

はい、クラスはあなたが必要とするものです。クラスは独自のタイプを定義します。

6
Markus

Project JUnionでは、クラスに@Structアノテーションを付けることで、Javaで構造体を使用できます

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

プロジェクトのウェブサイトの詳細情報: https://tehleo.github.io/junion/

4
Leo

「本当に」純粋な構造は、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 */ ;

そのため、変数を単に割り当てるか、クラスに静的に定義します。

2
Diva

はい、Javaにはまだ構造体/値型がありません。しかし、次のバージョンのJavaでは、C#のstructに似たinline classを取得し、割り当てのないコードを書くのに役立ちます。


inline class point { 
  int x;
  int y;
}

0