Здравствуйте, dims12, Вы писали:
D>Можно ли что-то такое сделать с классом enum, как-то его расширить? Например, добавить туда элементы в производном enume?
Нельзя.
Re: Можно ли как-то enum XXX extends YYY?
От:
Аноним
Дата:
29.05.07 07:06
Оценка:
Здравствуйте, dims12, Вы писали:
D>Можно ли что-то такое сделать с классом enum, как-то его расширить? Например, добавить туда элементы в производном enume?
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, dims12, Вы писали:
D>>Можно ли что-то такое сделать с классом enum, как-то его расширить? Например, добавить туда элементы в производном enume?
А>возможно появится в java 7
Здравствуйте, dims12, Вы писали:
D>Можно ли что-то такое сделать с классом enum, как-то его расширить? Например, добавить туда элементы в производном enume?
Ну хоть и нельзя, но можно
Только вот, в консерваторииб чегонить не сломалось от таких раскладов.
Ведь Enum — это что? Это перечисление констант. Собранных вместе. Им можно даже конструктор и методы определить, если очень хочется, этим константам. Считайте, что это инлайн b]final[/b] class. Как "экстендить" final классы, я думаю все и так знают.
Теперь по существу. Что такое наследование? Это когда вы передаете наследнику логику и нестатические данные. Впрочем, наследник может мутировать. Статические данные привязываются к своему хозяину раз и навсегда, и соответственно, не наследуются вообще. Да вы можете обращаться к статик полям через класс потомка, но это не есть хорошо. Почему не есть хорошо? Потому, что если вы обрашаетесь к статик полю класса A через класс B, который extends A, то вы достигаете своей цели ровно до тех пор, пока кто-нибудь не определит в классе B статическое поле с точно таким же именем. Что-то я тут расписался Вообщем смысл один — к статическому полю обращаться надо всегда напрямую.
Если вы забудете слово enum, то сразу вспомните final class с final static полями, некий прототип Enum в более ранних версиях. Вам бы пришло в голову наследовать public static final поля?
private final int value;
<enumName>(int realValue) {
this.value = realValue;
}
public char getValue() {
return (char) value;
}
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
E__>Так вот задалбывает копипастить в каждом
А ты попробуй подойти с другой стороны. Если надо копипайстить — значит проблема с дублировнаием, от которого надо избавиться. Если нельзя избавиться наследованием, надо избавляться делегированием. Я вот заметил, что значения int value нужны в основном, когда нужно передать enum в другую среду (например, записать код в поле БД, или в <select> и так далее), и когда нужно преобразовать значение, полученное из этой среды в enum. А в нутри системы всегда используется сам енум. Выделил интерфейс, который описывает преобразование из значения в код и из кода в значение
public interface BidiConverter<V, C> {
C thither(V value);
V hither(C code);
}
Слделал тупую реализацию, которую конфигурирую в spring
и для каждой внешней системы сделал адаптеры. Для hibernate UserType, для SpringMVC PropertyEditor и теперь все енумы в системе, за редкими исключениями, имеют вид
public enum model.PricingModel {
CPM, CPA, CPC, TF
}
L>А ты попробуй подойти с другой стороны. Если надо копипайстить — значит проблема с дублировнаием, от которого надо избавиться. Если нельзя избавиться наследованием, надо избавляться делегированием. Я вот заметил, что значения int value нужны в основном, когда нужно передать enum в другую среду (например, записать код в поле БД, или в <select> и так далее), и когда нужно преобразовать значение, полученное из этой среды в enum. А в нутри системы всегда используется сам енум.
Да, в моем случае это аппаратные коды устройства, которые посылаются непосредственно устройству, а на более высоком, "логическом" уровне драйвера, гораздо более удобны понятные enums.
L>Выделил интерфейс, который описывает преобразование из значения в код и из кода в значение
...
L>Слделал тупую реализацию, которую конфигурирую в spring
...
L>и для каждой внешней системы сделал адаптеры. Для hibernate UserType, для SpringMVC PropertyEditor и теперь все енумы в системе, за редкими исключениями, имеют вид
...
Решение интресное. Врядли я буду переписывать все существующие енамы, но все равно спасибо, может, потом сгодится.
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.