微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

用Java版本4.0编译

如何解决用Java版本4.0编译

| 当我在Eclipse中通过编译器遵从级别6.0编译此代码时,它可以正常编译,但是当我更改编译器级别4.0时,则此代码显示错误,指出不兼容的条件操作数类型为String和Integer。有什么问题,更改此代码需要获得相同的结果
Calendar cal = Calendar.getInstance();
String timeStr = (calendar.get(Calendar.HOUR_OF_DAY) < 10 ?    
    \"0\" + Integer.valueOf(calendar.get(Calendar.HOUR_OF_DAY)) :       
    Integer.valueOf(calendar.get(Calendar.HOUR_OF_DAY))) + \":\" + 
        (calendar.get(Calendar.MINUTE) < 10 ? 
        \"0\" + Integer.valueOf(calendar.get(Calendar.MINUTE)) : 
        Integer.valueOf(calendar.get(Calendar.MINUTE)));
    

解决方法

为什么不只使用ѭ1来获得相同的结果,像这样:
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(\"HH:mm\");
String timeStr = sdf.format(cal.getTime());
它与设置为1.4的编译器符合级别一起使用。 编辑:如果不存在
SimpleDateFormat
,以供参考,我建议编写如下内容:
int hour = calendar.get(Calendar.HOUR_OF_DAY);
int minute = calendar.get(Calendar.MINUTE);
String timeStr = (hour < 10 ? \"0\" : \"\") + hour + \":\"
        + (minute < 10 ? \"0\" : \"\") + minute;
    ,问题在于,如果HOUR_OF_DAY <10,则条件运算符将计算为字符串,否则,它将计算为整数。在4.0以下,这被认为是错误(编译器会指出)。 要解决此问题,您可能应该只使用内置的日期格式化程序之一,而不要使用无法始终编译的复杂逻辑。例如:
SimpleDateFormat dateFormatter = new SimpleDateFormat(\"HH:mm\");
String theCurrentTime = dateFormatter.format(cal.getTime());
但是,如果确实需要保留逻辑,则可以通过在条件运算符的“ 8”分支中的“ 7”调用之前放置“ 6”来解决此问题。不过,这不是最佳选择。     ,真正的问题是那些将9个值转换为11个对象的“ 9”调用。这没有做任何有用的事情。当编译器级别为4.0时,会出现编译错误,因为Java 1.4.x不支持取消装箱,因此三元运算符的操作数不兼容。 如果我们去掉
Integer.valueOf
东西,它看起来像这样:
String timeStr = 
    (calendar.get(Calendar.HOUR_OF_DAY) < 10 ?    
        \"0\" + calendar.get(Calendar.HOUR_OF_DAY) :       
        calendar.get(Calendar.HOUR_OF_DAY)) + 
    \":\" + 
    (calendar.get(Calendar.MINUTE) < 10 ? 
        \"0\" + calendar.get(Calendar.MINUTE) : 
        calendar.get(Calendar.MINUTE));
由于三元运算符的第二和第三操作数的类型不匹配,因此仍然无法编译。很容易解决:
 String timeStr = 
    (calendar.get(Calendar.HOUR_OF_DAY) < 10 ?    
        \"0\" + calendar.get(Calendar.HOUR_OF_DAY) :       
        \"\" + calendar.get(Calendar.HOUR_OF_DAY)) + 
    \":\" + 
    (calendar.get(Calendar.MINUTE) < 10 ? 
        \"0\" + calendar.get(Calendar.MINUTE) : 
        \"\" + calendar.get(Calendar.MINUTE));
(编译器可能会使用
\"\"
优化连接…) 最后,您可以对其进行进一步重构以提供此功能:
 int hours = calendar.get(Calendar.HOUR_OF_DAY);
 int minutes = calendar.get(Calendar.MINUTE);
 String timeStr = 
      (hours < 10 ? \"0\" : \"\") + hours + \":\" +
      (minutes < 10 ? \"0\" : \"\") + minutes;
    ,大多数人类程序员可能会对您的代码感到困惑;我猜编译器也是。 :-) 更好的样式(但不能直接回答您的问题)是:
Calendar cal = Calendar.getInstance();
SimpleDateFormat sdf = new SimpleDateFormat(\"HH:mm\");
String timeStr = sdf.format(cal);
    ,快速修复:添加一些空字符串(如果要保留代码):
String timeStr = 
    (calendar.get(Calendar.HOUR_OF_DAY) < 10 ?    
       \"0\" + Integer.valueOf(calendar.get(Calendar.HOUR_OF_DAY)) :       
       \"\"  + Integer.valueOf(calendar.get(Calendar.HOUR_OF_DAY)))
     + \":\" + 
    (calendar.get(Calendar.MINUTE) < 10 ? 
       \"0\" + Integer.valueOf(calendar.get(Calendar.MINUTE)) : 
       \"\"  + Integer.valueOf(calendar.get(Calendar.MINUTE)));
(但我也建议使用简单的格式化程序-从String到Integer再到int再回到String,您有很多可以避免的隐藏转换)     

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。