Во многих случаях Ant является излишним. Просто используйте BAT-файл, если вы находитесь в Windows или сценарии оболочки (sh-файл), если вы находитесь в Linux. Вы можете создать текстовый файл, который включает в себя все ваши команды javac и просто запустить этот файл, когда вы хотите его построить.
Например, я использую следующий файл bat для создания одного из моих приложений:
@echo off
echo Building Shazaam...
del classes\com\aepryus\shazaam\*.* /q
del classes\com\aepryus\shazaam\engine\*.* /q
del classes\com\aepryus\shazaam\domain\*.* /q
del classes\com\aepryus\shazaam\persist\*.* /q
del classes\com\aepryus\shazaam\view\*.* /q
del classes\com\aepryus\shazaam\task\*.* /q
del classes\com\aepryus\shazaam\action\*.* /q
del classes\com\aepryus\shazaam\controller\*.* /q
javac src\com\aepryus\shazaam\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar; -d classes
javac src\com\aepryus\shazaam\engine\*.java -classpath \lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\domain\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\persist\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\view\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\task\*.java -classpath \lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\action\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
javac src\com\aepryus\shazaam\controller\*.java -classpath \lib\Servlet.jar;\lib\AepUtil.jar;\lib\AepXML.jar;\lib\AepRPC.jar;\lib\AepLoom.jar;\lib\AepHTML.jar;\lib\Sprout.jar;classes; -d classes
cd classes
jar cf ..\war\WEB-INF\lib\Shazaam.jar .
cd..
echo Complete
проверьте System.Enum.Parse:
enum Colors {Red, Green, Blue}
// your code:
Colors color = (Colors)System.Enum.Parse(typeof(Colors), "Green");
Вы можете привести int к enum
(MyColour)2
Есть также вариант Enum.Parse
(MyColour)Enum.Parse(typeof(MyColour), "Red")
Вы можете использовать Enum.Parse
, чтобы получить значение перечисления из имени. Вы можете перебрать все значения с помощью Enum.GetNames
, а можете просто привести int к enum, чтобы получить значение enum из значения int.
Например, так:
public MyColours GetColours(string colour)
{
foreach (MyColours mc in Enum.GetNames(typeof(MyColours))) {
if (mc.ToString().Contains(colour)) {
return mc;
}
}
return MyColours.Red; // Default value
}
или:
public MyColours GetColours(string colour)
{
return (MyColours)Enum.Parse(typeof(MyColours), colour, true); // true = ignoreCase
}
В последнем случае будет выброшен ArgumentException, если значение не найдено, вы можете перехватить его внутри функции и вернуть значение по умолчанию.
Вы также можете ознакомиться с некоторыми предложениями в этом сообщении в блоге:
Мой новый маленький друг, Enum
В сообщении описывается способ создания очень простого универсального вспомогательного класса, который позволяет избежать уродливого синтаксиса преобразования, присущего Enum.Parse
- вместо этого вы в конечном итоге пишете что-то вроде этого в своем коде:
MyColours colour = Enum<MyColours>.Parse(stringValue);
Или просмотрите некоторые комментарии в том же сообщении, в которых говорится об использовании метода расширения для достижения аналогичного.
Как упоминалось в предыдущих ответах, вы можете приводить непосредственно к базовому типу данных (int -> enum type) или разбирать (string -> enum type).
но учтите - для перечислений не существует .TryParse, поэтому вам понадобится блок try/catch вокруг разбора, чтобы отлавливать неудачи.