gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:49:35 29 4
gpt4 key购买 nike

我正在使用 java.util.concurrent.TimeUnit 类,我发现了一些有趣的约定,我不知道,我不明白是关于枚举的,我已经举了一个例子我自己的,我希望有人能向我解释..

一个带有方法的简单接口(interface)。

interface MyInterface{public String concate(String... a);}

后来我创建了一个枚举

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 concate method 在外部枚举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

如果像这样评论嵌套枚举的其他问题

interface MyInterface{public String concate(String... a);}
public enum Enumerations implements MyInterface
{
@Override public String concate(String... a){return "java";}
}

显示错误..

请有人指导解释如何使用和命名这种方法..

非常感谢..

最佳答案

任何对象在声明时都可以有一个非静态初始化 block :

Object a = new Object() {
public long toNanos(long d) {
return d;
}
};

枚举也不异常(exception)。

block 中的方法必须覆盖/实现引用类型(上面的对象)的类/接口(interface)中的方法才能被调用。请注意,TimeUnit 初始化 block 中的所有方法都会覆盖 TimeUnit 本身中的方法。

关于java.util.concurrent.TimeUnit 类设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21163630/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com