Java Съвет 5: Java константи

Тази седмица създаваме някои константи, които имат всички предимства от използването на съоръженията на препроцесора C за дефиниране на константи по време на компилация и условно компилиран код.

Java се е отървала от цялото понятие за текстов препроцесор (ако приемате Java като „потомък“ на C / C ++). Можем обаче да извлечем най-добрите предимства на поне някои от функциите на препроцесора C в Java: константи и условна компилация.

Една от безспорно добрите характеристики на препроцесора C е възможността да се дефинират константите по време на компилация, като се използва текстово име, за да се представи някаква стойност. Това улеснява четенето и поддръжката. Освен това е по-бърз по време на изпълнение от използването на нормална променлива.

Може би злоупотребена характеристика на препроцесора C е използването на #define заедно с #ifdef и приятели за условно компилиране на цели блокове код. Казвам, че е спорно, тъй като хората често използват това съоръжение, за да се справят със специфични за платформата проблеми (и това е както добрата, така и лошата точка).

В C може да се дефинират някои константи в заглавен файл чрез:

#define MY_BDATE 10 #define SILLY_PLATFORM 

и след това получаване на достъп до тези константи, като използвате #include, за да ги включите в кодов файл, и след това да ги използвате:

fprintf (stderr, "Рожденият ми ден е на% d" "th! \ n", MY_BDATE); 

Еквивалентът в Java може да се направи чрез създаване на публични статични крайни променливи в интерфейс на Java :

интерфейс ConstantStuff {публичен статичен финал int MY_BDATE = 10; публичен статичен финален булев SillyPlatform = true; }

След това можем да получим достъп до тях, като използваме, за importда направим интерфейса видим за нас и след това използваме константите:

System.out.println („Моят рожден ден е на„ + ConstantStuff.MY_BDATE + "th!"); 

Препроцесорът C може условно да премахне големи области от текст, ако дадена константа на препроцесора е била или не е била дефинирана.

#if определено (SILLY_PLATFORM) / * Много лоши кодове за справяне с глупостите на платформата * SILLY. * / #else / * Код за работа с други, нормални платформи. * / #endif

Много хора се оплакват, че тази възможност липсва в Java. Не забравяйте, че една от причините Java да е толкова прекрасна е, че езикът е много по-добре дефиниран, така че специфичен за системата код като този дори не би трябвало да е необходим.

Както и да е, все пак можете да получите този вид условно компилиран код директно от компилатора! Можете просто да използвате публично статично крайните булевите константи като условие за редовно , ако изявление. Компилаторът на Java е достатъчно умен, за да разпознае това като специален случай и може напълно да премахне теста и кода на съответния условен клон.

Така че просто напишете условния израз както обикновено.

if (ConstantStuff.SillyPlatform) {// Код, който да се използва, ако платформата е вярна * по време на компилация *. } else {// Код, който да се използва, ако платформата е фалшива * по време на компилация *. }

Не знам за вас, но мразя да се налага да пиша това дълги име на интерфейс, преди да използвам някоя от тези константи. Така че, аз просто трябва ми клас, който ще използва тези константи прилагане на интерфейса . Тогава мога просто да използвам името директно, ако приемем, че няма сблъсъци с имена (в този случай ще трябва да ги различавате с пълните имена).

Събрах всички тези забавни неща в няколко прости Java приложения. Константи (//www.javaworld.com/javatips/javatip5/Constants.java) изпълнява на интерфейса и използва константи директно докато Constants2 (//www.javaworld.com/javatips/javatip5/Constants2.java) използва пълните имена на достъп до константите.

Джон Д. Мичъл е поредният завършил компютърни науки в UC-Berkeley, отбит от кофеин, захар и твърде малко сън. Той прекара три години, подлагайки се на PDA софтуер в Geoworks за акции, които всъщност струват повече от тапети. Той спаси ежедневната си работа след първата публична версия на Java, за да разработи аплети и Java компилатор. Той финансира пристрастяването си към Java, като пише компилатори, Tcl / Tk, Perl, C ++ и Java системи. Богатото му свободно време се изразходва чрез модериране на news.group comp.lang.tcl.announce и писане на страхотна книга за Java.

Тази история, "Java Съвет 5: Java константи" първоначално е публикувана от JavaWorld.