【发布时间】:2015-04-02 20:24:27
【问题描述】:
我有以下代码:
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)); }
我了解错误的发生是因为该函数是静态的,并且正在使用尚未设置的非静态成员来解析整数。
我在这里查看了很多关于这个的帖子,但我仍然无法理解最好的方法是什么。
非常感谢任何帮助。
【问题讨论】:
-
错误是什么?为什么方法声明为静态的?
-
这些方法的目的是什么?为什么他们是
private?还有你为什么要让他们static? -
@MickMnemonic 我更新了我的问题
-
正如@Pshemo 已经说过的,你为什么要让他们
static?static方法无权访问实例变量。 -
但是当你声明它们时你正在创建枚举实例。这就是枚举在 Java 中的工作方式。
标签: java enums static-methods non-static