如何将动态日期值设置为 Map<String,Object>?

how to set dynamic Date value to Map<String,Object>?

我想将动态日期值设置为 Map<String,Object> 并在 UI 中显示。我正在研究 JSF2。这是我的代码

private  Map<String, Object> selectDates;
    {
        selectDates = new LinkedHashMap<String, Object>();
        selectDates.put("First Date", "111"); //label, value
        selectDates.put("Second Date", "222");
    }
    public Map<String, Object> getSelectDates()
        {
            return selectDates;
        }

我有一个带有标签 "First Date" 和 "Second Date" 的下拉列表,现在我必须动态地为这些键分配值。如果我给出如下它不起作用:

 private  Date exDate;
private Date frontDate;
private  Map<String, Object> selectDates;
    {
        selectDates = new LinkedHashMap<String, Object>();
        selectDates.put("First Date", exDate;); //label, value
        selectDates.put("Second Date", frontDate;);
    }

public Map<String, Object> getSelectDates() {
    return selectDates;
}

我尝试使用 private Map<String, Date> selectDates; 但这没有给我价值,它给了我 null.

您正在使用非静态初始化代码块。此代码仅在创建包含 class 的实例时执行。这是我尝试使用您的代码时得到的结果

public class DatesInHash {

     private  Date exDate;
     private Date frontDate;
     private  Map<String, Object> selectDates;
     {
         //exDate = new Date();
         selectDates = new LinkedHashMap<String, Object>();
         selectDates.put("First Date", exDate); //label, value
         selectDates.put("Second Date", frontDate);
     }

     public Map<String, Object> getSelectDates() {
         return selectDates;
     }

     public void doDemo() {
         exDate = new Date();
         frontDate = new Date();
         Map<String, Object> datesMap = getSelectDates();

         System.out.println(((Date)datesMap.get("First Date")).toString());

     }

     public static void main(String[] args) {
         DatesInHash dIH = new DatesInHash();
         dIH.doDemo();

     }

}

当我执行这个应用程序时,我得到了一个空指针异常,因为在构建对象的那一刻,调用了非静态块,并且由于您的两个 Date 变量为空,它触发了异常。

但是,如果我取消注释这行代码 //exDate = new Date();,我会正常工作并显示日期变量的格式化版本。

除非您出于非常具体的原因需要使用非静态初始化块,否则我建议您创建一个简单的地图初始化方法,例如

 public void initMap() {

     selectDates = new LinkedHashMap<String, Object>();
     selectDates.put("First Date", exDate); //label, value
     selectDates.put("Second Date", frontDate);


 }

而且只有在你确定这两个日期都初始化好后才会调用。如果必须使用非静态块,则需要先正确初始化日期对象。

关于使用非静态初始化代码块的更多有用信息herehere