Java的字面初始值设定项主要用于基元(例如int i = 2
和double j = 4.2
),但也有某些非基本类也具有字面初始值设定项(例如String a = "Hello"
或Number z = 43
)。我正在寻找一个类似于我写的类的初始化器。我有一个类Numeric
,延伸Number
,我想能够初始化为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