【问题标题】:Is it possible to Store Enum value in String?是否可以将枚举值存储在字符串中?
【发布时间】:2012-12-14 05:00:34
【问题描述】:

其实我的java程序就像...

public class Schedule {
    public static enum RepeatType {
        DAILY, WEEKLY, MONTHLY;
    }

    public static enum WeekdayType {
        MONDAY(Calendar.MONDAY), TUESDAY(Calendar.TUESDAY), 
        WEDNESDAY(Calendar.WEDNESDAY), THURSDAY(Calendar.THURSDAY),
        FRIDAY(Calendar.FRIDAY), SATURDAY(Calendar.SATURDAY), SUNDAY(Calendar.SUNDAY);

        private int day;

        private WeekdayType(int day) {
            this.day = day;
        }

        public static List<Date> generateSchedule(RepeatType repeatType,List<WeekdayType> repeatDays) {
            // ...
            // here some logic i wrote
        }
    }
}

我正在将该方法调用到我的业务类中,如下所示......

@RemotingInclude
public void createEvent(TimetableVO timetableVO) {
    if ("repeatDays".equals(timetableVO.getSearchKey())) {
        List<Date> repeatDaysList = Schedule.generateSchedule(timetableVO.getRepeatType() , timetableVO.getRepeatDays());
    }
}

最后TimetableVO

@Entity
@Table(name="EC_TIMETABLE")
public class TimetableVO extends AbstractVO {
    // ...
    private RepeatType repeatType;

    // But in this case the method generateSchedule(-,-) was not calling.
    private List<WeekdayType> repeatDays;
    // ... 
}

所以我的问题是下面哪一个更好……

 private List<WeekdayType> repeatDays;

(或)

 // If we give like this `How to Convert Enum type to String` because generateSchedule() method taking enum type value....
 private String repeatDays; 

【问题讨论】:

  • 您在调用该方法时遇到了什么问题?似乎它应该工作。当然,第一个是更好的方法。
  • 谢谢...如果使用第一个方法未执行,我也在使用调试工具

标签: java hibernate enums


【解决方案1】:

使用 toString() 方法可以将任何枚举类型的值转换为字符串。你可能没有意识到(一开始我没有意识到)如果你声明了一个RepeatType 变量r1,那么r1 可以使用toString() 方法转换为Stringr1.toString()

这个程序:

public class Main {

    /** Creates a new instance of Main */
    public Main() {
    }

    public static enum RepeatType {
        DAILY, WEEKLY, MONTHLY;
    }    

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) {
        // TODO code application logic here
        RepeatType r1;
        r1 = RepeatType.DAILY;
        System.out.printf("R1 VALUE: %s\n", r1.toString());

        r1 = RepeatType.WEEKLY;
        System.out.printf("R1 VALUE: %s\n", r1.toString());

        r1 = RepeatType.MONTHLY;
        System.out.printf("R1 VALUE: %s\n", r1.toString());


    }

}

将输出实际的枚举值如下:

R1 VALUE: DAILY
R1 VALUE: WEEKLY
R1 VALUE: MONTHLY

【讨论】:

  • 您只在 Bean 类中使用重复类型吗?如果是这样,只需在 Bean 类中(内部)定义 Enum RepeatType。如果您还在 Bean 类之外使用 RepeatType,则将 RepeatType 声明为公共枚举可能会有所帮助
  • 查看此 URL 以获取公共枚举示例:(搜索 EnumTest)docs.oracle.com/javase/tutorial/java/javaOO/enum.html
【解决方案2】:

每个枚举类型都内置了方法name() 以将枚举名称作为StringvalueOf(String) 来获取另一个方向。这可能就是您要寻找的。​​p>

【讨论】:

  • 实际上我正在创建 String 类型并转换为 List
【解决方案3】:

最后我通过使用以下..得到了正确的答案..

    @Entity
@Table(name="EC_TIMETABLE")
public class TimetableVO extends AbstractVO {
    // ...
    private RepeatType repeatType;

    // But in this case the method generateSchedule(-,-) was not calling.
    private WeekdayType repeatDays;
    // ... 
}

在我的服务方法中,我将 Enum (WeekdayType) 转换为 List,因此很容易...

    List<WeekdayType> weekdayList= new ArrayList<WeekdayType>();
    weekdayList.add(timetableVO.getRepeatDays());
List<Date> repeatDaysList = Schedule.generateSchedule(timetableVO.getRepeatType() , weekdayList);

【讨论】:

  • 请将此问题标记为已解决。 (单击提供解决方案的答案旁边的复选标记。)
猜你喜欢
  • 2015-07-12
  • 1970-01-01
  • 1970-01-01
  • 2015-06-19
  • 2020-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多