第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

用switch case分解復(fù)雜方法

用switch case分解復(fù)雜方法

Helenr 2022-07-27 09:13:34
我的應(yīng)用程序中有一個取決于參數(shù)類型的邏輯,現(xiàn)在它的工作方式如下:   switch (parameter.getType()) {                case DOUBLE:                    countOfParameters = parameter.getDoubleValueCount();                    if (countOfParameters == 1) {                        propertiesBuilder.addProperty(parameter.getName(), parameter.getDoubleValue(0));                    } else if (countOfParameters > 1) {                        Double[] doubleValues = new Double[countOfParameters];                        for (int kj = 0; kj < countOfParameters; kj++) {                            doubleValues[kj] = parameter.getDoubleValue(kj);                        }                        propertiesBuilder.addProperty(parameter.getName(), doubleValues);                    }                    break;                case BOOLEAN:                    countOfParameters = parameter.getBoolValueCount();                    if (countOfParameters == 1) {                        propertiesBuilder.addProperty(parameter.getName(), parameter.getBoolValue(0));                    } else if (countOfParameters > 1) {                        Boolean[] booleanValues = new Boolean[countOfParameters];                        for (int kj = 0; kj < countOfParameters; kj++) {                            booleanValues[kj] = parameter.getBoolValue(kj);                        }                        propertiesBuilder.addProperty(parameter.getName(), booleanValues);                    }正如你所看到的,我有相同的邏輯,唯一改變的是一種解析值的方法。是否有可能擺脫重復(fù)的代碼?我想可以制作一些函數(shù)式接口函數(shù)的映射,但不確定應(yīng)該如何完成。有什么建議么?
查看完整描述

3 回答

?
慕尼黑5688855

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);


查看完整回答
反對 回復(fù) 2022-07-27
?
萬千封印

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);

}


查看完整回答
反對 回復(fù) 2022-07-27
?
猛跑小豬

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),希望不需要。


查看完整回答
反對 回復(fù) 2022-07-27
  • 3 回答
  • 0 關(guān)注
  • 118 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號