如何解决用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 举报,一经查实,本站将立刻删除。