Niezrozumiałe działanie setterów

0

Próbuję od paru godzin zrozumieć co jest złego w poniższym kodzie: (kod został wycięty z większego projektu, stąd takie "ekonomiczne" nazwy klas)

public class A
{
    public static void main(String[] args)
    {
        B b=new B();
        b.setDataKonc("01.01.2010");
        b.setDataPocz("01.01.2010");
        System.out.println(b.getDataKonc()); //01.01.2000
        System.out.println(b.getDataPocz()); //null, wtf?
        b=new B();
        b.setDataPocz("01.01.2010");
        System.out.println(b.getDataPocz()); //01.01.2000
    }
}

import java.text.*;
import java.util.*;

public class B
{
    private Date dataPocz=null;
    private Date dataKonc=null;
    private SimpleDateFormat df=null;
    private ParsePosition pos=null;
    //------------------------
    public B()
    {
        df=new SimpleDateFormat("dd.MM.yyyy");
        pos=new ParsePosition(0);
    }
    //------------------------
    public void setDataPocz(String dataPocz)
    {
        try
        {
            this.dataPocz=df.parse(dataPocz,pos);
        }
        catch (Exception e)
        {
        }
    }
    //------------------------
    public String getDataPocz()
    {
        if(dataPocz==null)
        {
            return "null";
        }
        else
        {
            return df.format(dataPocz);
        }
    }
    //------------------------
    public void setDataKonc(String dataKonc)
    {
        try
        {
            this.dataKonc=df.parse(dataKonc,pos);
        }
        catch (Exception e)
        {
        }
    }
    //------------------------
    public String getDataKonc()
    {
        if(dataKonc==null)
        {
            return "null";
        }
        else
        {
            return df.format(dataKonc);
        }
    }
}
0

przeczytaj sobie co się dzieje podczas wykonywania metody parse
http://java.sun.com/j2se/1.4.2/docs/api/java/text/SimpleDateFormat.html#parse(java.lang.String, java.text.ParsePosition)

0

Dzięki [browar] Czytałem już wcześniej ale niezbyt uważnie i eksperymentowałem tylko z tworzeniem formatera w setterach. A błąd tkwił w obiekcie ParsePosition.
Dla potomnych:

    public void setDataPocz(String dataPocz)
    {
        try
        {
            pos.setIndex(0);
            this.dataPocz=df.parse(dataPocz,pos);
        }
        catch (Exception e)
        {
        }
    }

i analogicznie dla setDataKonc().

1 użytkowników online, w tym zalogowanych: 0, gości: 1