<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress/2.2.1" -->
<rss version="2.0" 
	xmlns:content="http://purl.org/rss/1.0/modules/content/">
<channel>
	<title>Comments on: Перечисляемые типы в Java (enum types, enumerations)</title>
	<link>http://www.javenue.info/post/73</link>
	<description>Блог разработчика о Java и родственных технологиях</description>
	<pubDate>Sat, 05 Jul 2008 00:27:37 +0000</pubDate>
	<generator>http://wordpress.org/?v=2.2.1</generator>

	<item>
		<title>By: black zorro</title>
		<link>http://www.javenue.info/post/73#comment-22970</link>
		<author>black zorro</author>
		<pubDate>Mon, 07 Apr 2008 19:22:15 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-22970</guid>
		<description>&#62;&#62; public final class Modifiers extends java.lang.Enum
это как раз без вопросов, мое представление в том, что класс генерится для каждого из элементов енум-а,

да ...

вот только сейчас додумался глянуть результат компиляции (итак, класс Test0, с enum-ом Sex, с двумя элементами):

Test0$Sex.class
Test0$Sex$1.class
Test0$Sex$2.class

или вот еще экспериментик:

System.out.println(Sex.FEMALE.getClass().getSuperclass());
System.out.println(Sex.MALE.getClass().getSuperclass());

на выходе получил, что у обоих элементов enum-а один папа - сам enum:

class testi.Test0$Sex
class testi.Test0$Sex</description>
		<content:encoded><![CDATA[<p>&gt;&gt; public final class Modifiers extends java.lang.Enum<br />
это как раз без вопросов, мое представление в том, что класс генерится для каждого из элементов енум-а,</p>
<p>да &#8230;</p>
<p>вот только сейчас додумался глянуть результат компиляции (итак, класс Test0, с enum-ом Sex, с двумя элементами):</p>
<p>Test0$Sex.class<br />
Test0$Sex$1.class<br />
Test0$Sex$2.class</p>
<p>или вот еще экспериментик:</p>
<p>System.out.println(Sex.FEMALE.getClass().getSuperclass());<br />
System.out.println(Sex.MALE.getClass().getSuperclass());</p>
<p>на выходе получил, что у обоих элементов enum-а один папа - сам enum:</p>
<p>class testi.Test0$Sex<br />
class testi.Test0$Sex</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: c0nst</title>
		<link>http://www.javenue.info/post/73#comment-22958</link>
		<author>c0nst</author>
		<pubDate>Mon, 07 Apr 2008 05:51:15 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-22958</guid>
		<description>Почти все правильно говоришь.
Запись "public enum Modifiers" равноценна "public final class Modifiers extends java.lang.Enum". Это специальная лингвистическая конструкция для упрощения синтаксиса. Посмотри класс Enum из пакета java.lang.</description>
		<content:encoded><![CDATA[<p>Почти все правильно говоришь.<br />
Запись &#8220;public enum Modifiers&#8221; равноценна &#8220;public final class Modifiers extends java.lang.Enum&#8221;. Это специальная лингвистическая конструкция для упрощения синтаксиса. Посмотри класс Enum из пакета java.lang.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: black zorro</title>
		<link>http://www.javenue.info/post/73#comment-22948</link>
		<author>black zorro</author>
		<pubDate>Sun, 06 Apr 2008 18:47:26 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-22948</guid>
		<description>Недавно узнал что в java enum-ах можно делать так:

&lt;pre&gt;
enum Sex {
    MALE(1) {
        public void foo() {
            System.out.println(&#34;MALE::foo&#34;);
        }
    },
    FEMALE(0) {
        public void foo() {
            System.out.println(&#34;FEMALE::foo&#34;);
        }
    };
    private int sex;
    private Sex(int sex) {
        this.sex = sex;
    }
    public int getSize() {
        return this.sex;
    }
    public void foo() {
        System.out.println(&#34;?&#34;);
    }
}
&lt;/pre&gt;

и пример использования:

&lt;pre&gt;
public class TestMalesFemales {
    public static Sex getSex() {
        return Math.random() МЕНЕЕ_ЧЕМ 0.5 ? Sex.MALE : Sex.FEMALE;
    }
    public static void main(String[] args) {
        getSex().foo();
    }
}
&lt;/pre&gt;

Интересненько как в одном классе существуют три версии одной функции да еще с динамическим выбором нужного метода?
Не является ли каждый элемент enum-а фактически отдельным подклассом самого enum-а.</description>
		<content:encoded><![CDATA[<p>Недавно узнал что в java enum-ах можно делать так:</p>
<pre>
enum Sex {
    MALE(1) {
        public void foo() {
            System.out.println(&quot;MALE::foo&quot;);
        }
    },
    FEMALE(0) {
        public void foo() {
            System.out.println(&quot;FEMALE::foo&quot;);
        }
    };
    private int sex;
    private Sex(int sex) {
        this.sex = sex;
    }
    public int getSize() {
        return this.sex;
    }
    public void foo() {
        System.out.println(&quot;?&quot;);
    }
}
</pre>
<p>и пример использования:</p>
<pre>
public class TestMalesFemales {
    public static Sex getSex() {
        return Math.random() МЕНЕЕ_ЧЕМ 0.5 ? Sex.MALE : Sex.FEMALE;
    }
    public static void main(String[] args) {
        getSex().foo();
    }
}
</pre>
<p>Интересненько как в одном классе существуют три версии одной функции да еще с динамическим выбором нужного метода?<br />
Не является ли каждый элемент enum-а фактически отдельным подклассом самого enum-а.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: c0nst</title>
		<link>http://www.javenue.info/post/73#comment-22260</link>
		<author>c0nst</author>
		<pubDate>Thu, 13 Mar 2008 07:35:30 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-22260</guid>
		<description>Как-нибудь обязательно напишу несколько статей о javascript. Это действительно очень мощный и гибкий язык.</description>
		<content:encoded><![CDATA[<p>Как-нибудь обязательно напишу несколько статей о javascript. Это действительно очень мощный и гибкий язык.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Дима</title>
		<link>http://www.javenue.info/post/73#comment-22259</link>
		<author>Дима</author>
		<pubDate>Thu, 13 Mar 2008 07:30:06 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-22259</guid>
		<description>П про Яву скрипт нету блогов Ваших? Заметок? интересных статей? Очень интересуюсь и хочется развиваться ( я недавно занялся им).</description>
		<content:encoded><![CDATA[<p>П про Яву скрипт нету блогов Ваших? Заметок? интересных статей? Очень интересуюсь и хочется развиваться ( я недавно занялся им).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Арсений</title>
		<link>http://www.javenue.info/post/73#comment-21733</link>
		<author>Арсений</author>
		<pubDate>Tue, 26 Feb 2008 10:25:22 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-21733</guid>
		<description>Меня чем вообще Java смущает, так это тем, что объявление классов и реализация методов находятся вместе. Неудобно как-то смотреть. Вот привык в C++, что в *.H можно быстро посмотреть описание, а в *.cpp реализацию. Просто если класс сложный с кучей кода, то трудно это все окинуть взглядом.</description>
		<content:encoded><![CDATA[<p>Меня чем вообще Java смущает, так это тем, что объявление классов и реализация методов находятся вместе. Неудобно как-то смотреть. Вот привык в C++, что в *.H можно быстро посмотреть описание, а в *.cpp реализацию. Просто если класс сложный с кучей кода, то трудно это все окинуть взглядом.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Михайлов</title>
		<link>http://www.javenue.info/post/73#comment-21333</link>
		<author>Михайлов</author>
		<pubDate>Sun, 10 Feb 2008 19:28:42 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-21333</guid>
		<description>Спасибо вам за ту инфу, что вы размещаете в блоге!</description>
		<content:encoded><![CDATA[<p>Спасибо вам за ту инфу, что вы размещаете в блоге!</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Малофф</title>
		<link>http://www.javenue.info/post/73#comment-21153</link>
		<author>Малофф</author>
		<pubDate>Tue, 05 Feb 2008 11:09:19 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-21153</guid>
		<description>А можешь что-нибудь езё по Джаве написать ? Интересная это все таки тема.</description>
		<content:encoded><![CDATA[<p>А можешь что-нибудь езё по Джаве написать ? Интересная это все таки тема.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: samsonych</title>
		<link>http://www.javenue.info/post/73#comment-20991</link>
		<author>samsonych</author>
		<pubDate>Wed, 30 Jan 2008 15:00:20 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-20991</guid>
		<description>Тоже недавно на работе на 1.5 перешли.
Статейка, весьма актуальная на данный момент. Обязательно пригодиться. Спасибо.</description>
		<content:encoded><![CDATA[<p>Тоже недавно на работе на 1.5 перешли.<br />
Статейка, весьма актуальная на данный момент. Обязательно пригодиться. Спасибо.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: black zorro</title>
		<link>http://www.javenue.info/post/73#comment-20943</link>
		<author>black zorro</author>
		<pubDate>Mon, 28 Jan 2008 21:21:14 +0000</pubDate>
		<guid>http://www.javenue.info/post/73#comment-20943</guid>
		<description>А самое необычное для приходящих с c&#124;c++ то, что в java у enum-ов могут быть методы. На уровне компилятора в c++ enum-ы преобразовывались в целые числа фактически можно было делать вещи вроде (надеюсь не путаю)
 FOO === BAR + 10
В java когда объвляется тип enum, то это аналогично наследованию от класса. 


enum HUMANSTATE {
    GOOD, BAD, DRUNK
}

public class HackAppProc {
    public static void main(String[] args) {
        HUMANSTATE s = HUMANSTATE.GOOD;
        System.out.println (s.ordinal());
        System.out.println (s.name());
        System.out.println (s.compareTo(HUMANSTATE.BAD));
        for (HUMANSTATE state : HUMANSTATE.values()) {
            System.out.println(state);            
        }
    }
}

Интересно было бы почитать как enum-ы реализованы на уровне виртуальной машины в java и есть ли там хитрые хаки оптимизации.
А еще было бы неплохо увидеть статейку про SET-ы они с появлением varargs-синтаксиса и enum-ов стали как конфетки.

Ну а вообще официальный док: http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html и еще очень приятная статья на ibm devworks-ах: http://www.ibm.com/developerworks/ru/library/j-jtp02277/ про то как мученикам от java (сидящих под ранними версиями jdk) можно улучшить свою жизнь.</description>
		<content:encoded><![CDATA[<p>А самое необычное для приходящих с c|c++ то, что в java у enum-ов могут быть методы. На уровне компилятора в c++ enum-ы преобразовывались в целые числа фактически можно было делать вещи вроде (надеюсь не путаю)<br />
 FOO === BAR + 10<br />
В java когда объвляется тип enum, то это аналогично наследованию от класса. </p>
<p>enum HUMANSTATE {<br />
    GOOD, BAD, DRUNK<br />
}</p>
<p>public class HackAppProc {<br />
    public static void main(String[] args) {<br />
        HUMANSTATE s = HUMANSTATE.GOOD;<br />
        System.out.println (s.ordinal());<br />
        System.out.println (s.name());<br />
        System.out.println (s.compareTo(HUMANSTATE.BAD));<br />
        for (HUMANSTATE state : HUMANSTATE.values()) {<br />
            System.out.println(state);<br />
        }<br />
    }<br />
}</p>
<p>Интересно было бы почитать как enum-ы реализованы на уровне виртуальной машины в java и есть ли там хитрые хаки оптимизации.<br />
А еще было бы неплохо увидеть статейку про SET-ы они с появлением varargs-синтаксиса и enum-ов стали как конфетки.</p>
<p>Ну а вообще официальный док: <a href="http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html" rel="nofollow">http://java.sun.com/j2se/1.5.0/docs/guide/language/enums.html</a> и еще очень приятная статья на ibm devworks-ах: <a href="http://www.ibm.com/developerworks/ru/library/j-jtp02277/" rel="nofollow">http://www.ibm.com/developerworks/ru/library/j-jtp02277/</a> про то как мученикам от java (сидящих под ранними версиями jdk) можно улучшить свою жизнь.</p>
]]></content:encoded>
	</item>
</channel>
</rss>
