static final

Tags:    java

Hvordan får jeg fødelsdag til at være Static final efter at objektet er oprettet. Fødselsdag skal ikke kunne ædres efter objektet er kavet.

public Person(String navn, int fødselsdag, int cpr)
{
this.navn = navn;
this.cpr = cpr;
this.fødselsdag = fødselsdag;

}


Hvordan kunne man lave en metode der kunne returner alderen på en person. Hvis den på en eller anden måde sammenligner med året 2005? Jeg er virkelig helt blank

TB



5 svar postet i denne tråd vises herunder
3 indlæg har modtaget i alt 3 karma
Sorter efter stemmer Sorter efter dato
Hvordan får jeg fødelsdag til at være Static final efter at objektet er oprettet. Fødselsdag skal ikke kunne ædres efter objektet er kavet.

public Person(String navn, int fødselsdag, int cpr)
{
this.navn = navn;
this.cpr = cpr;
this.fødselsdag = fødselsdag;

}


Hvordan kunne man lave en metode der kunne returner alderen på en person. Hvis den på en eller anden måde sammenligner med året 2005? Jeg er virkelig helt blank

TB


Først og fremmest så SKAL final variablers initialiseres fx. final int birthday = 1; Initialiseringen behøver ikke at ske samtidigt med erklæringen, men skal initialiseres FØR BRUG. Det kan fx ske i constructoren (således som du har gjort). Problemet er at du SAMTIDIGT har erklæret foedselsdag som static og altså kan benyttes UDEN at constructoren er kaldt og foedselsdag dermed IKKE er initialiseret før brug.

Du kan jo blot erklære foedselsdag som privat final og dermed kun tillade at den bliver sat via constructoren. Så du har i virkeligheden løst dit problem - fjern static.

Den sidste del af dit spørgsmål forstår jeg simpelthen ikke. Jeg går udfra du ved hvordan man skriver en metode, der returnere en værdi - fx. en fødselsdag? Man kan naturligvis ikke lave en metode der nogle gange returnere en værdi og andre gange ikke gør det (hvis det er spørgsmålet).





Hvordan får jeg fødelsdag til at være Static final efter at objektet er oprettet. Fødselsdag skal ikke kunne ædres efter objektet er kavet.

public Person(String navn, int fødselsdag, int cpr)
{
this.navn = navn;
this.cpr = cpr;
this.fødselsdag = fødselsdag;

}


Hvordan kunne man lave en metode der kunne returner alderen på en person. Hvis den på en eller anden måde sammenligner med året 2005? Jeg er virkelig helt blank

TB


Hejsa,

Den nemmeste måde er at gøre object til et såkaldt immutable object. Det betyder at det ikke kan ændres når først det er lavet. Det gøres ved at lave alle fields private, i det her tilfælde, navn, cpr og fødselsdag (selvom man kan bruge æøå i java kode er det ikke tilrådeligt) og så ellers kun lave getter metoder til disse fields. Så er det ikke muligt at ændre.

For at udregne fødselsdagen så kig lidt på Calendar objectet. Her er der diverse metoder til at sammenligne datoer med.

mvh
/\\nders



Hvordan får jeg fødelsdag til at være Static final efter at objektet er oprettet. Fødselsdag skal ikke kunne ædres efter objektet er kavet.

public Person(String navn, int fødselsdag, int cpr)
{
this.navn = navn;
this.cpr = cpr;
this.fødselsdag = fødselsdag;

}

TB



Lad os starte med hvordan du gør fødselsdag Static final.
Hvis du vil have fødselsdag til at være static, skal du være klar over at det gælder for alle objekter af "Person". Hvis fødselsdag derimod ikke skal kunne ændres efter den er initialiseret, gøres dette med final.
Hvis det du ønsker er at kun have én fødselsdag til alle objekter af typen "Person" skriver du bare Static foran fødselsdag.
Skal den derimod ikke kunne ændres, skriver du final foran! Valgte mulighed(er) påføres foran "fødselsdag" inden constructoren.
Ved at kombinere Static - final, vil du have en fødselsdato for alle objekter af "Person" der ikke kan ændres.

Erling

P.s. Ligesom de andre har jeg svært ved at forstå spørgsmålet ang. alder.



[Redigeret d. 22/03-05 18:57:45 af Erling Veidal]



Til det sidste spørgsmål, så er den klassiske approach til dato og tids behandling i Java, Unix time i milli sekunder ... og den får du med System.currentTimeInMillis

Med Java 1.4 og helt sikker 1.5 er der nok kommet en del bedre metoder, der var allerede nogle ændringer tidligere, men nu er der nok nogle klart bedre metoder ... må man håbe på.

Gidder du ikke finde ud af hvad de er, eller vil du bare have en samlet nem måde, så giv denne her et kik, den er vist ret brugervenlig.

http://joda-time.sourceforge.net/




Hvordan får jeg fødelsdag til at være Static final efter at objektet er oprettet. Fødselsdag skal ikke kunne ædres efter objektet er kavet.

public Person(String navn, int fødselsdag, int cpr)
{
this.navn = navn;
this.cpr = cpr;
this.fødselsdag = fødselsdag;

}


Hvordan kunne man lave en metode der kunne returner alderen på en person. Hvis den på en eller anden måde sammenligner med året 2005? Jeg er virkelig helt blank

TB

Nå men der er mange gode svar allerede men jeg prøver lige alligevel.
Jeg ved ikke om det du, prøver på giver meget mening - hvis det du prøver på at opnå er at når man først har oprettet personen med en given fødselsdag så kan denne ikke ændres? så gør du det ved at lade feltet fødselsdag være private og lave public accessor metoder med kun get metoden.
f.eks.
Fold kodeboks ind/udKode 


Jeg ved ikke rigtigt hvad du skal bruge dette til, men du bør måske gøre dig nogle overvejelser om den måde du har lavet dit objekt på giver meget mening... f.eks. så er fødselsdag int? vil det sige, at man kan have 8224523 som fødselsdag?

Håber det hele ikke er sort snak... ;0)




t