Javaには構造体がないのでクラスで代用するしかない

注意: この記事は1年以上前に掲載されたものです。情報が古い場合がありますのでお気を付け下さい。

C言語からプログラミングを始めた場合、Javaのプログラミングの学習を行った際に時折遭遇するものとして、「Javaで構造体を表現したい時はどうすればいいのか」という問題がある。Javaでは構造体がないので、クラスで代用するという方法がある。

C言語では以下のような構造体を定義できる。

typedef struct _Hoge
{
    int fuga;
    int piyo;
}Hoge;

このような構造体は、Javaでは直接表現することができない。したがって、クラスで代用することになる。

オブジェクト指向の理念上、基本的にはアクセサを使用することが求められるため、上記の構造体をJavaで表現する場合は以下のようになる。

public class Hoge {
    private int _fuga;
    public int getFuga() {
        return this._fuga;
    }
    public void setFuga(int val) {
        this._fuga = val;
    }

    private int _piyo;
    public int getPiyo() {
        return this._piyo;
    }
    public void setPiyo(int val) {
        this._piyo = val;
    }
}

ただ、この場合は意味合い的には目的を果たしているのだが、コードの記述量が多くなるということと、メソッドで変数の取り出しと代入をする必要があるなど、C言語のように簡潔な記述を行えないという問題があるため、Javaの理念からは逸脱するが、以下のような書き方をすることもできる。

public class Hoge {
    public int fuga;
    public int piyo;
}

この場合は、C言語の構造体のように変数の代入が行えるようになる。

上記のいずれかの方法が考えられるが、いずれも利点と問題点があるため、よく考えた上で最適なものを選ぶと良いだろう。

タイトルとURLをコピーしました