我使用了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
方法OK对于我的
我的第一个问题是
STRINGUTILITIES{},
BEANENUMERATION{},
NANOSECONDS{}
是枚举吗?我认为实际上是嵌套枚举。。
我主要关心的是,如果comment
是外部枚举Enumerations
上的concate方法
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;}
};
}
如果外部枚举不实现该方法并且我在每个嵌套枚举上实现该方法,则为CCD_ 6。
另一个问题是,如果comment
是像这个一样的嵌套枚举
interface MyInterface{public String concate(String... a);}
public enum Enumerations implements MyInterface
{
@Override public String concate(String... a){return "java";}
}
显示错误。。
请有人指导解释这种方法是如何使用和命名的。。
非常感谢。。
任何对象在声明时都可以有一个非静态初始化块:
Object a = new Object() {
public long toNanos(long d) {
return d;
}
};
枚举也不例外。
块中的方法必须覆盖/实现引用类型(上面的Object)的类/接口中的方法才能被调用。请注意,TimeUnit初始化块中的所有方法都会覆盖TimeUnit本身中的方法。