Permalänk

Mest rätt kodning i JAVA

Hej, jag håller på med lite javaprogrammering.
Jag har en variabel som är av classen Dimension().
Den har en variabel : width, och en metod : getWidth som returnerar width -variabeln.

Vad är mest rätt att skriva? obj.width eller (int)obj.getwidth() Det ger ju samma resultat, men jag är ute efter vad som är mest standard.

Edit: la till (int) innan obj.getwidth() så att mitt påstående stämmer!

Pålagt efter en tid:
Jag har en till fråga. Jag håller på med massa grafik i JFrame utan ram och sånt ( setUndecorated(true); ) .
När jag målar till egna saker, typ ett eget Titelfönster, ska jag försöka gör det till ett objekt då, och sen lägga till det i JFramen. Eller ska jag bara skita i det och fortsätta att måla på. Vad är mest rätt att göra?
I och med att det är objektorgenterat så borde man väll göra så mycket osm möjligt till objekt, om det är nödvändigt.

Visa signatur

"SönderCrew" Is the shit

Permalänk
Medlem

Jag skulle rekomendera att du använder getWidth(). Först och främst för att majoriteten av alla objekt som man skriver i java har privata variabler (variabler som man inte kan "komma åt" utanför objektet) vilket gör att om du implementerar samma regler på de objekt som har publika variabler(som Dimension i detta fallet) så blir ändå din kod konsekvent vilket ofta är att föredra.

Permalänk

ah, ok. Tack för det.

Visa signatur

"SönderCrew" Is the shit

Permalänk
Medlem

Dom returnerar inte samma sak. Instansvariabeln 'width' returnerar en datatyp int med värdet av positionen i heltal. getWidth() returnerar en datatyp double med värdet av positionen i decimalform.

Dimesion d = new Dimension(); d.setSize(3.45, 8.6); int width = d.width; // <- returnerar 3 double d_width = d.getWidth(); // <- returnerar 3.45

Permalänk

om man skriver (int)d.getWidth() så gör dom det

Men du fattar vad jag menar! Detta var inte heller det markerande i frågan. Men skit samma

Visa signatur

"SönderCrew" Is the shit

Permalänk
Medlem

Du vill alltid använda dig av getWidth(). Varför? Tänk dig att du av någon anledning skulle vilja spara undan värdet på width i en textfil eller i en databas och vill inte ladda värdet från filen/databasen förrän värdet befrågas av användaren av din klass, t.ex. på grund av prestandaskäl. Det är omöjligt att göra om du accessar width direkt, men är inga problem om du använder dig av getWidth().

Samma sak gäller setters. Tänk dig att du inte vill tillåta att width underskrider 0. Det är enkelt att kolla med setWidth() men omöjligt om du accessar width direkt.

Man vill alltid sträva mot att gömma undan implementationen så att man enkelt kan ändra den efter behov.

Permalänk
Medlem

ChristofferC har helt rätt. När man utvecklar sina egna klasser och paket, vill man oftast skapa getters- och setters-metoder för att kunna kontrollera data innan en instansvariabel tilldelas värdet.

I fallet med Dimension kan jag bara spekulera i hur de har tänkt. Antagligen vill de kunna tillhandahålla värdet både som heltal och som decimaltal, och istället för att skapa två getters (getIntegerWidth() samt getDoubleWidth()) valde de att låta en instansvariabel vara "öppen". Men det betyder samtidigt att de har en private/protected instansvariabel för att lagra värdet på en double vilket innebär redundant kod/information. I mitt tycke borde de enbart använda sig av decimaltal (doubles) och använda uteslutande getters/setters - och låta utvecklarna casta om värdet till ett heltal. För annars finns som sagt risken med en negativ längd, vilket bör vara en omöjlighet.

Citat:

Jag har en till fråga. Jag håller på med massa grafik i JFrame utan ram och sånt ( setUndecorated(true); ) .
När jag målar till egna saker, typ ett eget Titelfönster, ska jag försöka gör det till ett objekt då, och sen lägga till det i JFramen. Eller ska jag bara skita i det och fortsätta att måla på. Vad är mest rätt att göra?
I och med att det är objektorgenterat så borde man väll göra så mycket osm möjligt till objekt, om det är nödvändigt.

Egentligen svårt att svara på, men grundtanken borde vara att skapa en egen Component (HoffaTitleBar extends Component) - det blir lättare att se vad det är, samt hur den kan användas är redan definierat i och med arvet från (J)Component.