public class Enum {
public static enum typePoster{
cinema,cultural,sport,theater
}
}
switch (position){
case Enum.typePoster.cinema: break;
case Enum.typePoster.theater: break;
}
Как правильно реализовать данные чтобы в switch я мог передать position который int возвращяет. А в case некое значение в виде названия. Который бы int тоже возвращял. Enum не прокатывает. Не знаю уже.
If не нравиться. Там все так не красиво выглядит. Что просто ужас....Куда податься, что делать.....
Constant expression required
Вообщем я не знаю как объяснить что мне надо. Поэтому вот смотрите на это чудо, которые работает, но не знаю правильно ли это. Да и хотелось бы чтобы String как - то автоматически получать можно было, из самого названия...
public interface ConstValue {
int cinemaInt=1;
int kinomaniaInt=2;
String cinemaString="cinema";
String kinomaniaString="kinomania";
}
Так константы работают в switch при проверке на Int и на String. Я хотел автоматизировать это. Чтобы указать лишь название к примеру cinema и после можно было как - то получить значение 0 и т.д. И значение в виде getName = "cinema".
Но в итоге у меня получилось вот такой непонятный код
public enum TypePoster {
private int position;
private String name;
private TypePoster(int position, String name) {
this.position = position;
this.name = name;
}
CINEMA(1, "cinema"), CULTURAL(2, "cultural"), SPORT(3, "sport"), THEATRE(4, "theatre");
}
а в чем сложность-то ? вместо
switch (position){
case Enum.typePoster.cinema: break;
case Enum.typePoster.theater: break;
}
сделать
switch (TypePoster.getByPosition(position)){
case TypePoster.CINEMA: break;
case TypePoster.SPORT: break;
//...
}
в TypePoster добавить метод
public static TypePoster getByPosition(int position) {
if (position == 1) {
return CINEMA;
} else if (position == 2) {
return CULTURAL;
} else if (position == 3) {
return SPORT;
} else if (position == 4) {
return THEATRE;
}
return UNKNOW;
}
и еще один элемент, что-то вроде
UNKNOW(-1,"unknow")
аналогично, если входным параметром вместо int будет String, то можно написать аналогиный getByPosition() метод getByName() - switch конструкция почти не изменится
Не очень понятен ваш вопрос. Что значит
А в case некое значение в виде названия. Который бы int тоже возвращял.
В чем проблема использовать Enum в switch ? Просто описываете перечисление и
используете имена его элементов в своем switch. Вот фрагмент кода из реального проекта:
/** Descriptions of the columns of the output transition file.
* the enum's item name is the inner name of the column used to access its data.
* Each instance (item) contains a field of class ColumnData that holds
* header text, default data text, and left-alignment flag used to format
* respective column. */
public enum LineColumnNames {
COMMENT ("Iobs ", LEFT_ALIGN),
// ........
LOWER_LEVEL ("L1", LEFT_ALIGN),
UPPER_LEVEL ("L2", LEFT_ALIGN),
LOWER_ENERGY ("E1", "_"),
UPPER_ENERGY ("E2", "_"),
// ........
CORR_GR_ERROR ("Dc");
ColumnData data;
private LineColumnNames(String headerTxt) {
data = new ColumnData(headerTxt);
}
// ........
};
/** Returns a StringBuilder that contains a formatted line
* ready to be written to the output file */
private StringBuilder colStringBuilder(LineColumnNames... valNames) {
StringBuilder sb = new StringBuilder();
String s;
for (LineColumnNames name: valNames) {
s = getStringValue(name);
if (!LineColumnNames.paramTabDelimited)
switch (name) {
case UPPER_LEVEL:
case UPPER_ENERGY: sb.append("- ");
default:
};
sb.append(s);
}
return sb;
}
Если нужно получить элемент перечисления по индексу типа int,
то делаете как-то так:
enum MyEnum { РАЗ, ДВА, ТРИ };
//....
int index = 1;
MyEnum item = MyEnum.values()[index]; // item == ДВА
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости