powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать приведение типов к Enumeration-классу?
9 сообщений из 9, страница 1 из 1
Как сделать приведение типов к Enumeration-классу?
    #32868370
wjack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть Enumeration-класс:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
 import  java.io.Serializable;

 public   class  MessageStatus  implements  Serializable
{
     private   final  String myName;

     public   static   final  MessageStatus EMPTY =  new  MessageStatus ( "" );
     public   static   final  MessageStatus WAIT_REPLY =  new  MessageStatus ( "Ожидает ответа" );
     public   static   final  MessageStatus ACCEPTED =  new  MessageStatus ( "Принято" );
     public   static   final  MessageStatus DECLINED =  new  MessageStatus ( "Отклонено" );

     private  MessageStatus ( String name )
    {
        myName = name;
    }

     public  String toString ()
    {
         return  myName;
    }

}

Также есть данные, которые хранятся в базе в виде строк, возможные значения которых совпадают со значениями enumeration-класса.

При извлечение данных и попытке приведения типов к enumeration-классу вываливается ClassCastException:
Привожу даннные к нужному типу следующим образом:
ms = ( MessageStatus )getData( "field5" );

На консоль вывожу значение getData( "field5" ) ( getData( "field5") возвращает значение типа String ) - оно находится среди тех значений, которые обьявлены в MessageStatus.

Подскажите как правильно написать приведение типов для данного случая, если это возможно. Или это невозможно в принципе?

P.S. Предположительно, причина в том, что адреса у объектов разные (у MessageStatus их всего может быть 4 ).
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32868549
ponomarevvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wjackms = ( MessageStatus )getData( "field5" );
А можно поподробнее, что и как возвращает getData?
--С уважением, ponomarevvb--
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32868572
Фотография А.Грасоff™
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ponomarevvb wjackms = ( MessageStatus )getData( "field5" );
А можно поподробнее, что и как возвращает getData?
--С уважением, ponomarevvb--

:)

автор: "getData( "field5") возвращает значение типа String"
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32868600
ponomarevvb
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А.Грасоff™ ponomarevvb wjackms = ( MessageStatus )getData( "field5" );
А можно поподробнее, что и как возвращает getData?
--С уважением, ponomarevvb--

:)

автор: "getData( "field5") возвращает значение типа String"
Да, не заметил
Wjack, тогда такое приведение не получится - String не состоит в родстве с MessageStatus.
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32869293
Gurney
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
wjack wrote:
> Есть Enumeration-класс:
> Также есть данные, которые хранятся в базе в виде строк, возможные
> значения которых совпадают со значениями enumeration-класса.
>
> При извлечение данных и попытке приведения типов к enumeration-классу
> вываливается ClassCastException:
> Привожу даннные к нужному типу следующим образом:
> ms = ( MessageStatus )getData( "field5" );

То, что ты хочешь сделать можно реализовать через Reflection, но это
долго и муторно.

Используй библиотеку Apache Commons Lang (http://jakarta.apache.org).
Там есть класс EnumUtils. Получится что-то вида:

ms = (MessageStatus)EnumUtils.getEnum(
MessageStatus.class,
getData("field5")
);
Posted via ActualForum NNTP Server 1.1
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32869485
wjack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gurney
Используй библиотеку Apache Commons Lang (http://jakarta.apache.org).


Большое спасибо! То что надо!
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32869517
concat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 import  org.apache.commons.lang.enum.EnumUtils;
 import  org.apache.commons.lang.enum.ValuedEnum;

 import  java.io.Serializable;


 class  Rating  extends  ValuedEnum  implements  Serializable {

   private  String name;

   public   static   final  Rating EXCELLENT =  new  Rating("Excellent",  1 );
   public   static   final  Rating OK =  new  Rating("OK",  2 );
   public   static   final  Rating LOW =  new  Rating("Low",  3 );


   private  Rating(String name,  int  dbKey) {
     super (name, dbKey);
     this .name = name;
  }

   public  String toString() {
     return  name;
  }

   public   static   void  main(String[] args) {

    Rating r = (Rating) EnumUtils.getEnum(Rating. class , "Excellent");
    System.out.println("r.getValue() = " + r.getValue());
    System.out.println("r.getName() = " + r.getName());
  }
}
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32869775
wjack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В принципе можно, наверное, обойтись и без библиотеки:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
 public   class  Rating  implements  Serializable {

     private  String name;

     public   static   final  Rating EXCELLENT =  new  Rating("Excellent");
     public   static   final  Rating OK =  new  Rating("OK");
     public   static   final  Rating LOW =  new  Rating("Low");
     private   static   final  Map INSTANCES =  new  HashMap();

     static  {
        INSTANCES.put(EXCELLENT.toString(), EXCELLENT);
        INSTANCES.put(OK.toString(), OK);
        INSTANCES.put(LOW.toString(), LOW);
    }

     private  Rating(String name) {
         this .name=name;
    }

     public  String toString() {
         return  name;
    }

     private  Object readResolve() {
         return  getInstance(name);
    }

     public   static  Rating getInstance(String name) {
         return  (Rating)INSTANCES.get(name);
    }
}

Это я нашел по адресу http://www.hibernate.org/172.html
...
Рейтинг: 0 / 0
Как сделать приведение типов к Enumeration-классу?
    #32870584
wjack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще такой вопрос: Как использовать Enumeration-класс в JavaBean, если я планирую свойство с типом соответсвующим Enumeration-классу использовать на JSP-страничках?

Кто нибудь-сталкивался с подобной проблемой?
Я не нашел решения, при котором, странички с подобными свойствами правильно работали ( использую Struts)
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Как сделать приведение типов к Enumeration-классу?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]