java.util.concurrent.TimeUnit类设计模式



我使用了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本身中的方法。

最新更新