簡體   English   中英

有一個靜態方法在枚舉中使用非靜態成員

[英]have a static method use a non-static member in enum

我有以下代碼:

private enum DateFormats {
        DDMMYYYY(0, 2, 4),
        MMDDYYYY(2, 0, 4),
        YYYYMMDD(6, 4, 0);

        private final int dayIndex;
        private final int monthIndex;
        private final int yearIndex;

        private DateFormats(int dayIndex, int monthIndex, int yearIndex) {
            this.dayIndex = dayIndex;
            this.monthIndex = monthIndex;
            this.yearIndex = yearIndex;
        }

        //Error happens here...
        private static int getDay(String date){ return Integer.parseInt(date.substring(dayIndex, dayIndex+2)); }
        private static int getMonth(String date){ return Integer.parseInt(date.substring(monthIndex, monthIndex+2)); }
        private static int getYear(String date){ return Integer.parseInt(date.substring(yearIndex, yearIndex+4)); }
    }

我得到的錯誤:

non-static variable dayIndex cannot be referenced from a static context
        private static int getDay(String date){ return Integer.parseInt(date.substring(dayIndex, dayIndex+2)); }

我知道發生此錯誤是因為該函數是靜態的,並且正在使用未設置的非靜態成員來解析Integer。

我在這里已經檢查了很多關於此的帖子,但是我仍然無法確定最好的方法是什么。

任何幫助深表感謝。

創建枚舉時,您具有三個實例:

DDMMYYYY(0, 2, 4),
MMDDYYYY(2, 0, 4),
YYYYMMDD(6, 4, 0);

這些實例每個都有三個字段,分別是dayIndexmonthIndexyearIndex 當您這樣做時:

DateFormats.DDMMYYYY.getDay()

您正在DDMMYYYY實例上調用getDay() ,並且希望getDay()使用您在構造函數中設置的特定實例變量,因此getDay()靜態是沒有意義的。

例如:

String date = "12052015";
int day1 = DateFormats.DDMMYYYY.getDay(date);
int day2 = DateFormats.MMDDYYYY.getDay(date);
System.out.println(day1);
System.out.println(day2);

結果:

12
05

另外,除非您只想從外部類訪問它們,否則我不明白為什么getDay()getMonth()getYear()應該是私有的。

暫無
暫無

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

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