[英]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);
這些實例每個都有三個字段,分別是dayIndex
, monthIndex
和yearIndex
。 當您這樣做時:
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.