Avatar billede bertelsenbo Nybegynder
30. august 2006 - 19:54 Der er 7 kommentarer og
1 løsning

NullPointerException når jeg tilføjer (sub)-objekt til ArrayList

Hejsa, jeg sidder og klør mig oven i skallen.
Jeg sidder og laver et lille banksystem, men får hele tiden java.lang.NullPointerException.
Jeg har en Abstract superklasse(BankAccount) med 3 subklasser(fx. BasicAccount). Jeg har en klasse der hedder Customer som skal tilføje et objekt af fx BasicAccount i en private ArrayList, men den brokker sig over metoden og smider java.lang.NullPointerException i fjæset på mig.

Koden til Customer:
import java.util.ArrayList;
public class Customer
{
    private String ssn;
    private String name;
    private String address;
    private ArrayList accounts;

    public Customer()
    {
    }

    public String getSsn(){return ssn;}
    public String getName(){return name;}
    public String getAddress(){return address;}
    public ArrayList getAccounts(){return accounts;}
    public void setSsn(String ssn){this.ssn = ssn;}
    public void setName(String name){this.name = name;}
    public void setAddress(String address){this.address = address;}
    public void openAccount(BankAccount account){ try{accounts.add((BankAccount)account);}
                  catch (NullPointerException e)
            {
                System.out.println("" + e);
            }}
    public void closeAccount(int index){((BankAccount)accounts.get(index)).closeAccount();}
}


Koden til BasicAccount:
public class BasicAccount extends BankAccount
{
    public BasicAccount(int dato){
        super.setOpeningDateNumber(dato);
        super.setAccountNumber(getNextAccountNumber());
        super.incrementNextAccountNumber();
    }
   
    final private double interestRate = 1.0;


    public boolean withdraw(double amount){
    if(super.getBalance() >= amount && super.getOpen() == true){
        super.setBalance(amount-super.getBalance()); return true;
    }else{return false;}
    }
   
    public double getInterestRate(){return interestRate;}
}


Jeg kan også godt poste koden til den Abstract super-klasse hvis det skulle hjælpe. Hvad går der galt?
Avatar billede bertelsenbo Nybegynder
30. august 2006 - 19:55 #1
Metoden der fejler er selvfølgelig "openAccount(BankAccount account)" i Customer klassen. Men hvorfor?
Avatar billede erikjacobsen Ekspert
30. august 2006 - 20:01 #2
Jeg kan ikke se du siger "new ArrayList()" noget sted.
Avatar billede bertelsenbo Nybegynder
30. august 2006 - 20:04 #3
suk... typisk.
Svar for point :]
Avatar billede erikjacobsen Ekspert
30. august 2006 - 20:05 #4
Nej tak. Samler ikke.
Avatar billede bertelsenbo Nybegynder
30. august 2006 - 20:07 #5
Jamen tak for hjælpen alligevel :]
Avatar billede jakoba Nybegynder
30. august 2006 - 21:36 #6
Men hvor laver du et objekt der er en subtype af BankAccount ?

Såvidt jeg kan se indsætter du din arraylist som et element i sig selv after at have casted den til objekttypen BankAccount (hvis metoder den ikke supporterer)
Avatar billede erikjacobsen Ekspert
30. august 2006 - 21:45 #7
Så vidt jeg kan se er der forskel på "accounts" og "account". Men det er lidt sjovt, fordi i linien
    accounts.add((BankAccount)account);
er der ingen grund til at lave en cast. "account" er en "BankAccount", hverken mere eller mindre. Det står den jo til i parameterbeskrivelsen. Derfor er det mere normalt blot at skrive:
    accounts.add(account);
Avatar billede jakoba Nybegynder
31. august 2006 - 01:38 #8
Ups, ja du har ret. oversaa det manglende s
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester