2015-06-14 3 views
1

В чем разница между полями и константами в документах андроидов? Например, в View Class у нас есть поля и константы. Я думаю, что константы в классе вида являются полями. Поскольку каждая переменная в каждом классе является полем. Пожалуйста, пример для меня об этой двусмысленности.В чем разница между полями и константами в андроидной документации?

+0

Как правило, различают ли они чтение/запись.Константы объявляются 'final' и доступны только для чтения (например,' public static final int ACCESSIBILITY_LIVE_REGION_ASSERTIVE'). При этом я не знаю, как их генераторы JavaDoc различают «окончательные» значения, такие как «SELECTED_STATE_SET» (перечисленные в Полях) и «ACCESSIBILITY_LIVE_REGION_ASSERTIVE» (перечислены в Константах). – CommonsWare

ответ

3

Когда ваше приложение скомпилировано, любые константные значения скомпилируются непосредственно в приложение. Используя пример из комментария @ CommonsWare, ACCESSIBILITY_LIVE_REGION_ASSERTIVE является целым числом со значением 2. Это значение будет по-прежнему использоваться вашим приложением, даже если класс View будет обновлен в будущей версии Android, поэтому вы не можете поставить " какую версию Android я сейчас запускаю на «в константе». И наоборот, это прекрасный способ записать, какую версию SDK было скомпилировано вашим приложением.

Поля окончательные, что означает, что вы не можете их изменить, если только вы не используете JNI, и в этом случае вы можете. Однако, поскольку компилятор использует значения напрямую, когда это возможно, изменение значения конечных полей не повлияет на какой-либо код - если только он не обратится к ним через отражение.

Таким образом, различие между «постоянным» и «полем» может иметь важное значение.

Примитивные типы и строки могут быть константами. Для массивов и других типов объектов, таких как int[], используемых для SELECTED_STATE_SET, эта ссылка сама по себе доступна только для чтения, но содержимое объекта не является. Это относится к любому изменяемому типу объектов, поэтому нет смысла перечислять их под «константами».

1

В Java нет такой вещи, как константа. Есть только поля, которые можно пометить static, чтобы стать полем класса (то есть одним экземпляром для каждого класса для всех объектов одного и того же класса, а не по одному на каждый объект, как будто без «статического»). Вы можете получить доступ к статическим полям по ссылке на класс, не создавая экземпляр класса (т. Е. MyClassName.sMyStaticField) Кроме того, вы можете пометить свое поле final. Это означает значение поля, назначенное в коде инициализации, и никогда не изменится. Если вы назначаете статическое окончание, укажите постоянное значение (например, число), это значение не изменится и будет одинаковым для всех экземпляров класса. Таким образом, в Java он используется как постоянное значение, чтобы назначить определенное значение конкретному имени. Поскольку их значения известны во время компиляции, их можно использовать для создания условной компиляции. Часть коды, в зависимости от таких постоянных величин, может быть исключена во время компиляции

public static final boolean ENABLE_MY_SUPER_DUPER = false; 

... 


if (ENABLE_MY_SUPER_DUPER) { 
    doSuperDuper(); // Not just never executed, but not even compiled 
} 

Это не может быть произошло, если значение, присвоенное поле не может быть известно во время выполнения приложения (например, ссылки на объекты или массивы)

таким образом, технически, статического конечные поля и так называемый «постоянное» то же самое, но в документации «константы» обозначают некоторые предопределенные постоянные значения, которые одинаковы для всех приложений (то есть числа, строки константы и т. д.). В «поле» под «статическим финалом» есть некоторые объекты, которые создаются один раз сразу после запуска приложения, но его значение не может быть известно во время компиляции. Например, массивы, некоторые экземпляры объектов и т. Д. Технически вы не можете изменять свои значения, так как они являются финалами, но вы можете изменить их внутренний контент. То есть вы не можете создать новый объект или массив и назначить его в одно и то же поле, но вы можете изменить элементы или поля уже созданного массива/объекта.

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