Операторът за превключване на Java 7 с низове не работи

Според Уроците по Java, в Java SE 7 и по-нови, можете да използвате String обект в израза на switch оператора.

String s = ...
switch(s){
    //do stuff
}

Но вярно ли е това? Инсталирах JRE и го добавих към пътя за изграждане на моя проект Eclipse, но получавам следната грешка по време на компилиране:

Не може да се включи стойност от тип String. Разрешени са само конвертируеми int стойности или enum константи

Освен това мисля, че съм го конфигурирал правилно, тъй като успях да използвам неговия java.nio.file.Files клас, както и JLayer.

Някакви идеи?


person mre    schedule 03.06.2011    source източник
comment
Имате ли скорошна Eclipse IDE с активиран Java 7? Коя версия използвате? Eclipse носи свой собствен Java компилатор!   -  person Daniel    schedule 03.06.2011
comment
Да, опитайте да го компилирате извън Eclipse и вижте дали работи.   -  person    schedule 03.06.2011
comment
@Daniel, предполагам, че съм наивен, когато става въпрос за IDE. Мислех, че конфигурирането на пътя на компилация с подходящия JRE ще изясни нещата, като видя, че специфичните за jdk7 функции се компилират и изпълняват с помощта на Eclipse. Предполагам, че просто бях хванат неподготвен, когато тази функция също не се компилира/изпълни. Надявам се, че не си бил саркастичен...   -  person mre    schedule 04.06.2011
comment
Тъй като Eclipse поддържа частично компилиране на класове и създава валидни клас файлове, дори ако отделни функции съдържат грешки при компилиране, той просто се нуждае от собствен компилатор. В допълнение, компилаторът на Eclipse поддържа инкрементални компилации и т.н. Просто използвайте скорошна версия на eclipse и сте готови.   -  person Daniel    schedule 04.06.2011


Отговори (3)


Въпреки че е вярно, че екипът на JDT е внедрил функцията за включване на низ, поддръжката за Java 7 няма да е преди Eclipse 3.7.1:

Вижте бъг 288548:

Поради късна наличност на JSR-292 (Invoke Dynamic) и JSR-334 (Project Coin) и поради официалната дата на пускане (28 юли 2011 г.) на Java 7, която е след 3.7, трябваше да отложим поддръжката на Java 7 до 3.7 .1. Все още не е решено дали това ще бъде налично като част от изтеглянията 3.7.1 или като отделна актуализация на функцията.

Работата по функциите на Java 7 в момента е в ход в клона „BETA_JAVA7“ и ние ще доставим отделни актуализации за стабилните версии, за да предоставим ранен достъп до функциите на Java 7 за заинтересованите страни.

person VonC    schedule 03.06.2011
comment
Някаква дата на пускане на 3.7.1? На същия ден? - person Bart van Heukelom; 21.07.2011
comment
@Bart: Вижте wiki.eclipse.org/Indigo/Simultaneous_Release_Plan#SR1 GA: 9 /23/2011 (четвърти петък на септември) - person VonC; 21.07.2011
comment
2 месеца по-късно? Ох... Добре, просто ще използвам бета версията. - person Bart van Heukelom; 21.07.2011

Eclipse все още не поддържа компилация на JDK 7, за да изпробвате новата функция, трябва да използвате NetBeans 7 или да компилирате със стандартен javac компилатор в пакета на JDK 7 на ръка или с помощта на ant скрипт.

person aleroot    schedule 03.06.2011

Използвайте Eclipse 3.8 (първият етап дойде преди няколко дни). Не забравяйте да зададете настройките на компилатора на Java 7.

person Hannes Licht    schedule 12.08.2011