Javaのリテラルイニシャライザは主にプリミティブ(たとえばint i = 2
および)に使用されますが、リテラルイニシャライザ(例:String a = "Hello"
またはNumber z = 43
)を持つ非プリミティブクラスもあります。私が書いたクラスのそれと同様の初期化子を実装しようとしています。私はNumber
を拡張するクラスNumeric
を持っています。それはNumeric a = 43
として初期化できるようにしたいと考えています。これはJavaで行うことができる方法はありますか?あれば、どのようにすればいいですか?ここでプリミティブではないタイプのためにJavaでリテラルイニシャライザを書くことはできますか?
はNumeric
public class Numeric extends Number {
private HashMap<Primitive, Number> values;
private Primitive origin;
public Numeric(byte value) {
values = new HashMap<>();
values.put(Primitive.BYTE, value);
values.put(Primitive.SHORT, (short) value);
values.put(Primitive.INT, (int) value);
values.put(Primitive.LONG, (long) value);
values.put(Primitive.FLOAT, (float) value);
values.put(Primitive.DOUBLE, (double) value);
origin = Primitive.BYTE;
}
public Numeric(short value) {
values = new HashMap<>();
values.put(Primitive.BYTE, (byte) value);
values.put(Primitive.SHORT, value);
values.put(Primitive.INT, (int) value);
values.put(Primitive.LONG, (long) value);
values.put(Primitive.FLOAT, (float) value);
values.put(Primitive.DOUBLE, (double) value);
origin = Primitive.SHORT;
}
public Numeric(int value) {
values = new HashMap<>();
values.put(Primitive.BYTE, (byte) value);
values.put(Primitive.SHORT, (short) value);
values.put(Primitive.INT, value);
values.put(Primitive.LONG, (long) value);
values.put(Primitive.FLOAT, (float) value);
values.put(Primitive.DOUBLE, (double) value);
origin = Primitive.INT;
}
public Numeric(long value) {
values = new HashMap<>();
values.put(Primitive.BYTE, (byte) value);
values.put(Primitive.SHORT, (short) value);
values.put(Primitive.INT, (int) value);
values.put(Primitive.LONG, value);
values.put(Primitive.FLOAT, (float) value);
values.put(Primitive.DOUBLE, (double) value);
origin = Primitive.LONG;
}
public Numeric(float value) {
values = new HashMap<>();
values.put(Primitive.BYTE, (byte) value);
values.put(Primitive.SHORT, (short) value);
values.put(Primitive.INT, (int) value);
values.put(Primitive.LONG, (long) value);
values.put(Primitive.FLOAT, value);
values.put(Primitive.DOUBLE, (double) value);
origin = Primitive.FLOAT;
}
public Numeric(double value) {
values = new HashMap<>();
values.put(Primitive.BYTE, (byte) value);
values.put(Primitive.SHORT, (short) value);
values.put(Primitive.INT, (int) value);
values.put(Primitive.LONG, (long) value);
values.put(Primitive.FLOAT, (float) value);
values.put(Primitive.DOUBLE, value);
origin = Primitive.DOUBLE;
}
Primitive
のソースコードの一部は、すべてのプリミティブ型を持つだけで、基本的なenum
です。
いいえ、できません。 – resueman