我正在尝试编写一个方法,该方法从包含所有消息的数组中获取未读邮件数组。这是我的代码:
public Message[] getUnreadMessages() {
Message[] messages = inbox.getMessages(1, messageCount);
Message[] unreadMessages;
int i = 0;
for (Message message : messages) {
boolean isMessageRead = false;
for (Flags.Flag flag : message.getFlags().getSystemFlags()) {
if (flag == Flags.Flag.SEEN) {
isMessageRead = true;
break;
}
}
String subject = message.getSubject();
if (isMessageRead) {
log.debug("Message with subject '" + subject + "' has status read");
} else {
unreadMessages[i] = new Message();
unreadMessages[i] = message;
i++;
log.info("Message with subject '" + subject + "' will be processed");
}
}
return unreadMessages;
}
但是,这不起作用,因为我无法实例化新的Message()类型。我该如何解决这个问题?
答案 0 :(得分:1)
您可以设置:
unreadMessages[i] = message;
之前的行是没用的,因为你只是将指针覆盖一行更深(某些IDE会说这个)
还有一个建议:
将未读消息设为List<Message>
,您可以添加Message
而无需计算i
public Message[] getUnreadMessages() {
Message[] messages = inbox.getMessages(1, messageCount);
List<Message> readMessages = new ArrayList<Message>();
for (Message message : messages) {
boolean isMessageRead = false;
for (Flags.Flag flag : message.getFlags().getSystemFlags()) {
if (flag == Flags.Flag.SEEN) {
readMessages.add(message);
break;
}
}
List<Message> unread = Arrays.asList(messages).removeAll(readMessagess);
return unread .toArray(new Message[unread.size()]);
}
答案 1 :(得分:0)
您实际上并不需要将新消息放入数组的行。无论如何,下一行只是覆盖了数组中的那个插槽。