为什么这些数组元素在另一个类中调用时变为null?

时间:2013-11-26 14:36:20

标签: java

我实例化了我的Message对象并将它们放入这个消息数组(收件箱)中。这是在Identify类中完成的。但是,当我尝试在我的Filter类中获取这些Message对象时,对象本身变为null并且我什么也得不到它。为什么呢?

以下是识别电子邮件的方法:

public void identifyEmail(String input1)
    throws IOException, NumberFormatException,
ArrayIndexOutOfBoundsException, EmptyArrayException
{
inFile = new File(input1);
in = new Scanner(inFile);
int MESSAGE_AMOUNT = countMessage(input1);

    for(int i = 0;i<MESSAGE_AMOUNT;i++){
            noMoreMail = true;
            emailAddress = find(input1,"From:");
            if(noMoreMail){
                break;
            }
            MIN = extractInt(find(input1,"MIN:"));
            message = getMessage(input1);
            target++;

            ib.addMessage(MIN, emailAddress, message);
    }
}

我有一个Inbox类来保存Message对象数组:

public class Inbox {

public Message[] inbox;
public int messageCount;

public Inbox(){
    inbox = new Message[100];
    messageCount = 0;
}

这就是问题所在。当它循环遍历Filter类中的电子邮件时,它只会通过null Messages。

for(int i=0; i<ib.messageCount; i++){
        Message email = ib.inbox[i];
        System.out.println(email.getMIN());

        test1 = checkBlackList(email);
        if(!test1){test2 = checkKeyword(email);}
        // if spam mail is not on black list but still is spam

        if(test1){updateKeywords(email);}
        if(test2){addToBlackList(email);}
        if(test1 || test2){
            minToAdd = addToMINList(email);
        }
    }

谢谢!

addMessage方法

public void addMessage(int MIN, String emailAddress, String message){
    if(messageCount < 100){
    Message m = new Message(MIN, emailAddress, message);
    inbox[messageCount] = m;
    messageCount++;
    } else {
    increaseSize();
    Message m = new Message(MIN, emailAddress, message);
    inbox[messageCount] = m;
    messageCount++;
    }
}

2 个答案:

答案 0 :(得分:2)

如果不直接填充数组的成员,那么该数组只是null值的加载,或原始类型的默认值。

示例

String[] strs = new String[10];
// Strs = {null, null .... null}

Object[] objs = new Object[10];
objs[0] = new Object();

// objs = {new Object(), null, null ... null}

所以你看,只需通过声明数组,就不会定义它的元素。

答案 1 :(得分:0)

我建议使用Message对象的ArrayList而不是仅使用Array,因为它会为您提供各种各样的功能。

查看您的代码,我怀疑问题可能出在addMessage()方法中。

ib is the object of Inbox class. When you are calling the method addMessage, are you 
updating messages in the inbox array of the 'this'(i.e. the ib ) object? or you are
instantiating another Inbox object and adding the Messages there?

Could you furnish the addMessage() code up here...?

这不是答案,应视为评论。请不要接受它作为答案。 我没有足够的权限发表评论。

请不要否定它。