2015-12-06 4 views
1

Я читал много ответов, подтверждающих мои (совершенно очевидные) мнения об использовании перечислений вместо String объектов при работе с небольшими замкнутыми наборами значений.Почему RandomAccessFile принимает строку вместо enum как параметр «mode»?

Но в последнее время я заметил несколько примеров в Java API, где был сделан противоположный выбор. Я могу вспомнить только это одно прямо сейчас

public RandomAccessFile(File file, String mode) 

где mode параметр может быть только r, rw, rws или rwd. В противном случае будет выбрано исключение IllegalArgumentException.

Единственная причина, по которой я могу думать, это то, что такой метод может предшествовать внедрению enum на языке Java, правильно? Если это правда, существуют ли ситуации сегодня, когда выбор строки вместо enum может иметь смысл для закрытого набора?

+3

Скорее всего, потому, что API был указан, когда у Java не было перечислений. –

+0

Это моя догадка, я искал подтверждения/ретракции –

ответ

4

RandomAccessFile был представлен как JDK1.0, тогда как перечисления были представлены в JDK5.0.

+1

Это не мешает обновлению класса с новыми конструкторами на основе enum ... – marcolopes

-1

Как и @mrwiggles, Java enum были введены как часть выпуска Java 5.

Если вы хотите знать, почему и/или как они улучшили язык, есть много блогов и примеров там, демонстрирующих свои преимущества:

В общем, если у вас есть целый ряд специально предопределены значения, как вы отметили здесь, с r, rw и т. д., это определенно более логично пойти с enum. Они менее двусмысленны и могут быть спроектированы так же, как и любой другой класс (содержащий методы, переменные экземпляра, константы и т. Д.). Они также могут также продемонстрировать незначительные улучшения производительности по сравнению с String s в некоторых случаях, если они часто проверяются. Прочитайте Java: Performance of Enums vs. if-then-else, чтобы узнать, о чем я говорю.

Джошуа Блох обсуждает преимущества enum с более int констант в своей книге Эффективное Java. Это не совсем то, что мы говорим здесь, но это довольно близко (см More Effective Java with Google's Joshua Bloch):

Для перечислений, звук укус «Всегда использовать перечисления вместо Int констант» (пункт 30). Перечисления предоставляют так много преимуществ: безопасность типа компиляции, возможность добавлять или удалять значения, не разбивая клиентов, значимые печатные значения, возможность связывать методы и поля со значениями и т. Д. Поскольку у нас есть EnumSet, этот совет применим в равной степени к битовым полям, которые следует считать устаревшими.

+0

Это более чем ясное улучшение для меня, я спрашивал, есть ли веские причины вместо этого использовать строки.(не уменьшилось число битв ...) –

+0

Все в порядке. Это ваше право на это. Я, вероятно, не должен был добавлять эту глупую часть в конце. Раньше я ха-ха. Но позвольте мне переписать свой ответ, я определенно пропустил то, что вы просили. – Mike

+0

ОТ: Я приду на твою сторону мира однажды в жизни! –