2014-01-16 2 views
2

Я использовал класс java.util.concurrent.TimeUnit, и я нашел несколько интересных соглашений о том, что я не знал, и я не понимал, что это перечисления, которые я сделал пример самостоятельно надеюсь кто-нибудь может объяснить мне ..java.util.concurrent.TimeUnit class Образец дизайна

простой интерфейс с методом.

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 метод concate на внешней нумерации 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

Это выглядит * очень * странно для меня. Почему у вас есть enum * перечислений *? Что может кто-нибудь делать с просто значением типа «Перечисления»? Это не поможет, что вы не указали каких-либо признаков того, для чего предназначен метод conc conc. –

+0

Вы _actually_ читаете [enum docs] (http://docs.oracle.com/javase/tutorial/java/javaOO/enum.html)? –

+0

метод concate - это всего лишь метод, который не заботится о том, какие средства достижения - это только дизайн, который мне интересен, чтобы понять ..... этот код базируется на TimeUtil.class Java API, это просто более читаемый пример. . – chiperortiz

ответ

2

Любой объект может иметь нестатический блок инициализации при объявлении:

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

Перечисления не являются исключением.

Методы в блоке должны переопределять/реализовывать методы в классе/интерфейсе вашего ссылочного типа (объект выше), чтобы быть вызываемым. Обратите внимание, что все методы в инициализации TimeUnit блокируют методы переопределения в самом TimeUnit.

+0

это правильно, я понимаю, теперь спасибо – chiperortiz

Смежные вопросы