3 回答

TA貢獻(xiàn)1848條經(jīng)驗(yàn) 獲得超2個贊
如果我理解正確,那么可能是這樣的:
Map<Type, Consumer<Builder>> map = Map.of(
BOOLEAN, x -> x.add(BOOLEAN.parseBool()),
STRING, x -> x.add(STRING.parseString())
);
map.get(type).accept(builder);

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個贊
不確定您需要什么,但您可以使用泛型類型。
public class Element<T> {
// T stands for "Type"
private T t;
public void set(T t) { this.t = t; }
public T get() { return t; }
}
您可以在您的功能中使用:
public Object parse(Element t){
if( t.get() instanceof Boolean )
return parseBoolean(t);
else if ( t.get() instanceof String )
return parseString(t);
}

TA貢獻(xiàn)1858條經(jīng)驗(yàn) 獲得超8個贊
首先映射 DOUBLE-to-Double 等等,可以在枚舉中完成:
enum ValueType {
DOUBLE(Double.class), // Or Double[].class
BOOLEAN(Boolean.class),
...;
public final Class<?> type;
ValueType(Class<?> type) {
this.type = type;
}
}
顯然代碼已經(jīng)太專業(yè)了,而實(shí)際上確切的類型是無關(guān)緊要的。在這個級別上,一個值可能只是一個 Object 并且可以有Object[]。
因此,一些深度重構(gòu)將是理想的。
ValueType vt = parameter.getType();
Class<?> t = vt.type;
Object array = Array.newInstance(t, countOfParameters);
// Actuallly Double[] or such.
int countOfParameters = parameter.getValueCount();
if (countOfParameters == 1) {
propertiesBuilder.addProperty(parameter.getName(), parameter.getValue(0));
} else if (countOfParameters > 1) {
Object array = Array.newInstance(t, countOfParameters);
Class<?> componentT = array.getClass().getComponentType(); // == t
Object[] values = new Object[countOfParameters];
for (int kj = 0; kj < countOfParameters; kj++) {
Array.set(array, kj, parameter.getValue(kj));
values[kj] = parameter.getValue(kj);
}
propertiesBuilder.addProperty(parameter.getName(), values); // or array
}
我添加了一些反射代碼 ( Array),希望不需要。
添加回答
舉報