2012-08-14 6 views
1

Во-первых, мой комментарий относится к простым перечислениям, которые не включают в себя их собственные индивидуальные методы. Я не могу думать о какой-либо технической причине, и кажется довольно расточительным создание soo многих маленьких классов, когда основной будет enuff.Почему Javac генерирует разные классы для каждого литерала Enum

DaysOfWeekEnum { 
    MON,// 
    TUES, // 
} 

@Aman Спасибо за указание на ошибку, я, должно быть, ошибся, глядя на мой выходной реж. Я закрою, когда смогу.

+1

Так как спецификация VM может оставаться той же (как до того, как перечислены перечисления на языке), изменяется только спецификация языка? – martijno

+1

Поздравляем, у вас более 200 вопросов без принятого ответа. : P –

+1

@PeterLawrey, я бы хотел поддержать ваш комментарий, но я мог бы отметить его как «не конструктивный»: -P. Таким образом, я буду сопротивляться и делать это, и, возможно, сам помечается ... –

ответ

0

Я сделал ошибку, задав этот вопрос q. проигнорируйте это неправильно!

0

Если вы используете Jar, создается только один файл.

Тот факт, что вы можете индексировать больше записей, является плюсом, поскольку он позволяет им лениться загружаться с более тонкой детализацией.

ИМХО, ничего не было бы получено при наличии менее .class файлов

кажется довольно расточительно

Стоимость 10000 небольших файлов, которые не нуждаются в предположении, что растрачивает 5 МБ: 0,022 центов.

Сколько стоит ваше время 0.022 цента при условии, что вы на минимальной зарплате: 11 секунд.

Если вы потратили более 11 секунд, пытаясь сэкономить 10 000 файлов, это может быть расточительным.

+0

@NathanHughes i Не заботьтесь о дискового пространства, мой q чисто теоретический. То, как это кажется неправильным. –

+0

@ mP: я не ответил на ваш вопрос, Питер Лоури сделал это, я только что отредактировал ответ, чтобы исправить опечатку. Никто не захочет отвечать на ваши вопросы, если вы подавите всех. –

+0

Теоретически все возможно и его единственная реальность, которая заставляет нас делать конкретные выборы. http://en.wikipedia.org/wiki/Black_swan_theory –

0

Ответ на линии: Все перечисления неявно простираться java.lang.Enum.

+0

Вы пропустили точку. Создайте простой Enum, включенный в q, и вы увидите внутренние классы для каждой «константы». –

+0

@ mP. Эй, я попробовал, и он не создает новый файл класса для каждой «константы», он создает только новый для объявленного перечисления. PLS снова проверить. –

1

Перечисления действительно есть методы, даже если вы не объявлять их. Каждое перечисление переопределяет методы от java.lang.Enum, чтобы дать разумные реализации специфических методов перечисления, а javac генерирует метод valueOf, специфичный для этого перечисления. Также кажется глупым перекомпилировать все классы, которые используют перечисление, когда первый пользовательский метод добавляется в перечисление.

+0

syttictic методы живут на классе outter. Я говорю о внутренних классах. –

+1

@ mP: Вы меня неправильно понимаете. Если вы создадите enum 'E', тогда javac будет генерировать: public class E {public static E valueOf (String s) {...} ...}, а не пустой класс ... –

0

Вся точка перечисления создает тип с конечным числом значений. Единственный способ сделать это в Java - с незначительными изменениями на языке - генерирует класс для перечисления, генерируя значения как постоянные объекты этого класса и гарантируя, что никто не может создавать экземпляры других объектов этого класса.

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