我正在使用班级java.util.concurrent.TimeUnit
,我发现了一些有趣的约定,我不知道,我不明白是关于枚举我自己做了一个例子我希望有人可以向我解释..
带方法的简单接口。
interface MyInterface{public String concate(String... a);}
后者我创建了一个enumeration
public enum Enumerations implements MyInterface
{
STRINGUTILITIES{},
BEANENUMERATION{},
NANOSECONDS
{//sample methods
public long toNanos(long d) { return d; }
public long toMicros(long d) { return d; }
public long toMillis(long d) { return d; }
public long toSeconds(long d) { return d; }
public long toMinutes(long d) { return d; }
public long toHours(long d) { return d; }
public long toDays(long d) { return d;}
public long convert(long d) { return d;}
int excessNanos(long d, long m){return 13;}
};
@Override public String concate(String... a){throw new AbstractMethodError();}
}
我需要为我实施concate
方法确定
我的第一个问题是。
STRINGUTILITIES{},
BEANENUMERATION{},
NANOSECONDS{}
是枚举?我认为实际上是嵌套的枚举..
我主要担心的是外部枚举comment
上的Enumerations
连接方法
STRINGUTILITIES{},
BEANENUMERATION{},
NANOSECONDS{}
抱怨他们没有实现这个方法..似乎3个内部枚举在某种程度上扩展了外部枚举,如果外部枚举正在实现该方法,那么就可以了。
像这样public enum Enumerations implements MyInterface
{
STRINGUTILITIES{},
BeanEnumeration{},
NANOSECONDS
{
public long toNanos(long d) { return d; }
public long toMicros(long d) { return d; }
public long toMillis(long d) { return d; }
public long toSeconds(long d) { return d; }
public long toMinutes(long d) { return d; }
public long toHours(long d) { return d; }
public long toDays(long d) { return d;}
public long convert(long d) { return d;}
int excessNanos(long d, long m){return 13;}
};
}
如果外部枚举没有实现该方法,并且我在每个嵌套枚举上实现该方法是OK
。
其他问题,如果comment
这样的嵌套枚举
interface MyInterface{public String concate(String... a);}
public enum Enumerations implements MyInterface
{
@Override public String concate(String... a){return "java";}
}
显示错误..
请有人通过解释如何使用这种方法并命名..
非常感谢..
答案 0 :(得分:2)
声明时,任何对象都可以拥有非静态初始化块:
Object a = new Object() {
public long toNanos(long d) {
return d;
}
};
枚举也不例外。
块中的方法必须覆盖/实现引用类型(上面的Object)的类/接口中的方法才能被调用。请注意,TimeUnit初始化块中的所有方法都会覆盖TimeUnit本身的方法。