簡體   English   中英

從內部類訪問變量而不將其定型

[英]Access variable from inner class without making it final

我怎樣才能使它工作:

public void onStart()
        {
            super.onStart();

            int dayN = 0;
            int i = 0;
            String day = null;
            String addFach;

            String mo1 = null;
            String mo2 = null;
            String mo3 = null;
            String mo4 = null;
            String mo5 = null;
            String mo6 = null;
            String mo7 = null;
            String mo8 = null;
            String mo9 = null;
            String mo10 = null;
            String mo11 = null;

            String di1 = null;
            String di2 = null;
            String di3 = null;
            String di4 = null;
            String di5 = null;
            String di6 = null;
            String di7 = null;
            String di8 = null;
            String di9 = null;
            String di10 = null;
            String di11 = null;

            String mi1 = null;
            String mi2 = null;
            String mi3 = null;
            String mi4 = null;
            String mi5 = null;
            String mi6 = null;
            String mi7 = null;
            String mi8 = null;
            String mi9 = null;
            String mi10 = null;
            String mi11 = null;

            String do1 = null;
            String do2 = null;
            String do3 = null;
            String do4 = null;
            String do5 = null;
            String do6 = null;
            String do7 = null;
            String do8 = null;
            String do9 = null;
            String do10 = null;
            String do11 = null;

            String fr1 = null;
            String fr2 = null;
            String fr3 = null;
            String fr4 = null;
            String fr5 = null;
            String fr6 = null;
            String fr7 = null;
            String fr8 = null;
            String fr9 = null;
            String fr10 = null;
            String fr11 = null;

            while (dayN <= 4)
            {
                if (dayN == 0)
                {
                    day = "Montag";
                } else if (dayN == 1)
                {
                    day = "Dienstag";
                } else if (dayN == 2)
                {
                    day = "Mittwoch";
                } else if (dayN == 3)
                {
                    day = "Donnerstag";
                } else if (dayN == 4)
                {
                    day = "Freitag";
                }

                while (i <= 10)
                {

                    BufferedReader buf;
                    try
                    {
                        buf = new BufferedReader(new FileReader("/sdcard/" + i + day + "fach.txt"));
                        addFach = buf.readLine();

                        if (day == "Montag")
                        {
                            if (i == 0) mo1 = addFach;
                            else if (i == 1) mo2 = addFach;
                            else if (i == 2) mo3 = addFach;
                            else if (i == 3) mo4 = addFach;
                            else if (i == 4) mo5 = addFach;
                            else if (i == 5) mo6 = addFach;
                            else if (i == 6) mo7 = addFach;
                            else if (i == 7) mo8 = addFach;
                            else if (i == 8) mo9 = addFach;
                            else if (i == 9) mo10 = addFach;
                            else if (i == 10) mo11 = addFach;
                        } else if (day == "Dienstag")
                        {
                            if (i == 0) di1 = addFach;
                            else if (i == 1) di2 = addFach;
                            else if (i == 2) di3 = addFach;
                            else if (i == 3) di4 = addFach;
                            else if (i == 4) di5 = addFach;
                            else if (i == 5) di6 = addFach;
                            else if (i == 6) di7 = addFach;
                            else if (i == 7) di8 = addFach;
                            else if (i == 8) di9 = addFach;
                            else if (i == 9) di10 = addFach;
                            else if (i == 10) di11 = addFach;
                        } else if (day == "Mittwoch")
                        {
                            if (i == 0) mi1 = addFach;
                            else if (i == 1) mi2 = addFach;
                            else if (i == 2) mi3 = addFach;
                            else if (i == 3) mi4 = addFach;
                            else if (i == 4) mi5 = addFach;
                            else if (i == 5) mi6 = addFach;
                            else if (i == 6) mi7 = addFach;
                            else if (i == 7) mi8 = addFach;
                            else if (i == 8) mi9 = addFach;
                            else if (i == 9) mi10 = addFach;
                            else if (i == 10) mi11 = addFach;
                        } else if (day == "Donnerstag")
                        {
                            if (i == 0) do1 = addFach;
                            else if (i == 1) do2 = addFach;
                            else if (i == 2) do3 = addFach;
                            else if (i == 3) do4 = addFach;
                            else if (i == 4) do5 = addFach;
                            else if (i == 5) do6 = addFach;
                            else if (i == 6) do7 = addFach;
                            else if (i == 7) do8 = addFach;
                            else if (i == 8) do9 = addFach;
                            else if (i == 9) do10 = addFach;
                            else if (i == 10) do11 = addFach;
                        } else if (day == "Freitag")
                        {
                            if (i == 0) fr1 = addFach;
                            else if (i == 1) fr2 = addFach;
                            else if (i == 2) fr3 = addFach;
                            else if (i == 3) fr4 = addFach;
                            else if (i == 4) fr5 = addFach;
                            else if (i == 5) fr6 = addFach;
                            else if (i == 6) fr7 = addFach;
                            else if (i == 7) fr8 = addFach;
                            else if (i == 8) fr9 = addFach;
                            else if (i == 9) fr10 = addFach;
                            else if (i == 10) fr11 = addFach;
                        }
                    }
                    catch (Exception e)
                    {

                    }

                    i++;
                }

                i = 0;
                dayN++;
            }

            RadioButton rB1 = (RadioButton) getView().findViewById(R.id.stunde1);
            RadioButton rB2 = (RadioButton) getView().findViewById(R.id.stunde2);
            RadioButton rB3 = (RadioButton) getView().findViewById(R.id.stunde3);
            RadioButton rB4 = (RadioButton) getView().findViewById(R.id.stunde4);
            RadioButton rB5 = (RadioButton) getView().findViewById(R.id.stunde5);
            RadioButton rB6 = (RadioButton) getView().findViewById(R.id.stunde6);
            RadioButton rB7 = (RadioButton) getView().findViewById(R.id.stunde7);
            RadioButton rB8 = (RadioButton) getView().findViewById(R.id.stunde8);
            RadioButton rB9 = (RadioButton) getView().findViewById(R.id.stunde9);
            RadioButton rB10 = (RadioButton) getView().findViewById(R.id.stunde10);
            RadioButton rB11 = (RadioButton) getView().findViewById(R.id.stunde11);
            DatePicker dP = (DatePicker) getView().findViewById(R.id.datePicker);

            dP.init(dP.getYear(), dP.getMonth(), dP.getDayOfMonth(), new DatePicker.OnDateChangedListener()
            {
                public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
                {
                    Calendar cal = Calendar.getInstance();
                    cal.set(year, monthOfYear, dayOfMonth);
                    int dayOfWeek = cal.get(Calendar.DAY_OF_WEEK);

                    switch(dayOfWeek)
                    {
                        case Calendar.MONDAY:
                            rB1.setText(mo1);
                            break;
                    }

                }
            });
        }

它應根據帶有日期選擇器的所選日期的工作日設置某些單選按鈕的文本。 我無法將字符串設置為final,因為它們被分配了2次值。

不,不可能。

JLS#第8章

使用的但未在內部類中聲明的任何局部變量,形式參數或異常參數必須聲明為final。

內部類中使用但未聲明的任何局部變量必須在內部類主體之前明確分配(第16節)。

附帶說明:請使用Collections而不是聲明很多字段。

這是如何從文檔中訪問它們的示例:

class WithDeepNesting {
    boolean toBe;
    WithDeepNesting(boolean b) { toBe = b; }

    class Nested {
        boolean theQuestion;
        class DeeplyNested {
            DeeplyNested(){
                theQuestion = toBe || !toBe;  // here you are able to access now.
            }
        }
    }
}

如果聲明它們作為成員變量(一個方法以外,優選之前onCreate()為了可讀性),他們將在整個訪問Activity甚至內部類的的Activity

通常的方法是將它們轉換為成員變量。 但是,根據您的情況,您需要重新考慮您的設計。

您有太多的代碼重復。 您應該將其重構為使用集合,這時內部類問題便會解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM