(モバイルデバイス上で)多くのインスタンスが存在する可能性のあるクラスがあるため、サイズを最小化しようとしています。私のフィールドの1つは、描画操作が無視されているか、パスにキューに入れられているか、ディスプレイに描画されているかを示す「DrawTarget」です。可能な値は3つしかないので、1バイト以下にしたいのですが、ハードコードされた数値がないように、わかりやすいコードにしたいのです。1つの考えは、次のような列挙型を使用することです。
public enum DrawTarget {
Invisible,
Path,
Canvas
}
しかし、私が読んだところによると、Java列挙型ではメモリレイアウトを指定できません-列挙型の値がバイトサイズの値を表すように要求することはできません-列挙型の値は最終的に整数サイズの値になると思いますJavaで。
だから私はおそらく列挙型で暗黙の変換演算子を作ることを考えました...これはJavaで可能ですか?または、列挙型内にこのようなものを実装するための私の最良のオプションです:
public static DrawTarget fromValue(byte value) {
switch (value) {
case 0:
return Invisible;
case 1:
return Path;
default:
return Canvas;
}
}
次に、値にアクセスしたい場所でDrawTarget.fromValueを呼び出しますか?
それとも、(これに関する私の研究で読んだことから)列挙型は基本的にJavaの特別なクラスであるため、シングルバイトクラスを作成する必要がありますか?
public class DrawTarget {
public static final byte Invisible = 0;
public static final byte Path = 1;
public static final byte Canvas = 2;
}
しかし、最後のソリューションを使用する場合、列挙型インスタンスの値をどのように表すのですか?「=」演算子がクラスの静的フィールドの1つを受け入れることができるようにする方法がまだ必要です...変換コンストラクターや代入演算子のオーバーロードなど。
ただし、参照型であるクラスオブジェクトは、インスタンスごとに1バイト以上かかると思います。本当?