根据值更改不同的变量以实现有效的代码重用

时间:2013-10-05 10:16:35

标签: java android variables code-reuse

我有 long 类型的变量:hour_6dayshour_7dayshour_8dayshour_13days

我有一个字符串数组:

String[] jj = rule.split(del);

其中jj[0]包含其中一个数字67813

如何根据jj[0]

中的值更改上述长变量

例如,如何编写以下内容,使得赋值的右侧等同于左侧变量,如:

hour_6days = "hour_"+jj[0]+"6days"; //this is invalid as hour_6days is of long type.

更清楚,

如果jj[0]包含6,那么我将使用long变量的hour_6days值。如果jj[0]包含7,那么我将使用长变量的hour_7days值。

我用来设置某些TextView的值:

TextView tt2 = (TextView) v.findViewById(R.id.th3);

tt2.setText(hour_7days);

更新

我想重用代码以避免多个条件。如上所述,在某些情况下,我使用的是tt2.setText(hour_7days);,在某些其他情况下,我使用的是tt2.setText(hour_6days);,依此类推。我想避免这些条件,只需简单地使用tt2.setText(hour_6_or_7_or_8days)

2 个答案:

答案 0 :(得分:1)

如果我理解你,你会使用enum,例如:

public enum EHourDay{

    hour_6days(6),  // actually I would use Upper case
    hour_7days(7),
    hour_8days(8),
    hour_13days(13);

    public static EHourDay
    FromIntToEnum(
            int value ) throws Exception
            {
        for ( EHourDay c : EHourDay.values() ) {
            if ( c.mId == value ) {
                return c;
            }
        }

        throw new Exception( new StringBuilder("Illegal EHourDay: ").append(value).toString() );
            }

    public int
    FromEnumToInt() {
        return mId;
    }

    private EHourDay( int id )
    {
        mId = id;
    }

    private int mId;
}

主要

public static void main(String[] args) throws NumberFormatException, Exception {

        String rule = "6 7 8 13";

        String[] jj = rule.split(" ");

        for(String str : jj){
            EHourDay hourDay = EHourDay.FromIntToEnum(Integer.parseInt(str));

            System.out.println(hourDay);
        }

    } 

您可以键入以下内容:

tt2.setText(EHourDay.FromIntToEnum(Integer.parseInt(str)));

答案 1 :(得分:1)

尝试使用MapHashMap是可能的选择。

HashMap<Integer, Long> dayValues = new HashMap<Integer, Long>();

dayValues.put(6,  <put long value for 6 days here>);
dayValues.put(7,  <put long value for 7 days here>);
dayValues.put(8,  <put long value for 8 days here>);
dayValues.put(13, <put long value for 13 days here>);

...

tt2.setText(dayValues.get(jj[0]).toString());

这将使用jj[0]中的整数值从地图中获取相应的字符串值,并将其设置为tt2