Avatar billede kristianp Nybegynder
09. maj 2003 - 11:31 Der er 8 kommentarer og
2 løsninger

initialisering af instans variabler

Når man laver en klasse der har nogle instans parameter, hvor er det så smartest at initialisere disse parameter, i selve instantieringen, eller først i setter og getter metoder.


public class DeclarationHeaderTO extends TransferObject {
    private String declarationType = "";
    private String AfregnMoentEnhed = "";
    private Timestamp dateOfAcceptance = new Timestamp(0);
    private int consigneeTRNumber = 0;
    private short exporterTCNr = 0;
   
}

Eller

public class DeclarationHeaderTO extends TransferObject {
    private String declarationType = null;
    private String AfregnMoentEnhed = null;
    private Timestamp dateOfAcceptance = null;
    private int consigneeTRNumber;
    private short exporterTCNr;
   
}

Og er det en god ide at bruger wrapper klasserne til de primitive typer så man kan kode med null tjek
Avatar billede arne_v Ekspert
09. maj 2003 - 11:33 #1
Du bør initialisere enten i erklæringen eller i constructor.

(unitialiserede variable er slemt)
Avatar billede arne_v Ekspert
09. maj 2003 - 11:34 #2
Om du vil initialisere en String med null eller "" og om du
vil bruge Integer eller int afhænger af hvad der giver mening
for din applikation.
Avatar billede jakoba Nybegynder
09. maj 2003 - 11:47 #3
wrapper klasserne til de primitive typer er mere en sproglig komplettering end noget der er bruge for.
ved beregninger skal en
    Integer antal = new Integer(25);
anvendes helt anderledes (og koster mere tid) end
    int antal = 25;

Fidusen med wrappers er at de giver en standardklasse at gemme de typespecifikke funktioner i
    antal.toString(16);  // lav til hexadecimal streng
selvom antal blot er en int kan du bruge den somom den var en Integer når du ønsker adgang til typens klasser Java vil så vælge den korrekte toString metode at udføre fra Integer klassen.

mvh JakobA
Avatar billede disky Nybegynder
09. maj 2003 - 11:47 #4
Instantier altid i erklæringen af dem, eller i constructoren.

Hvis dine variabler er defineret på klasse niveau får de en default værdi af kompileren, men ikke hvis de er defineret på metode niveau, men god kotume er altid selv at give dem default værdien.

Hvad du instantierer dem til er helt op til designet af dit program.
Avatar billede kristianp Nybegynder
09. maj 2003 - 12:21 #5
Umiddelbart ville jeg lave alle object instanser til null, derved kan jeg tjekke om de er initialiseret eller ikke. Men jeg mener bare jeg har hørt noget om at det ikke er så pænt, der skal så laves en masse ( if xx == null ) i koden, samt at der let kommer uventede NullpointerExceptions.
Men på den anden side, hvis jeg initialisere en String til "", er det svært at tjekke om den er blevet sat af en bruger til "", eller den ikke er blevet sat.

Samtidig ville jeg så wrapper alle primitive type så der også her kan kodes mod null referencer.
Avatar billede arne_v Ekspert
09. maj 2003 - 12:27 #6
Du beskriver jo selv udmærket problem-stillingen.

Jeg mener bare ikke at der er noget generelt svar der er bedst i alle
situationer.

Du må vurdere om det i din applikation er vigtigt at kunne se om noget
er initialiseret og om du har tillid til at programmørerne kan
kode så de undgår null pointer exceptions.
Avatar billede kristianp Nybegynder
09. maj 2003 - 12:53 #7
Jeg må nok lave lidt mere analyse arbejde, takker !!!
Avatar billede jakoba Nybegynder
09. maj 2003 - 13:50 #8
Undskyld. der var jeg lovlig langt ude i hampen
import java.io.*;
import java.lang.*;

public class Wrappers {
 
    static void wrtln( String txt ) {
        System.out.println( txt );
    }

    public static void main (String[] args) {
   
        Boolean b1 = new Boolean( false );
        boolean b2 = false;
     
        Integer i1 = new Integer( 42 );
        int i2 = 42;

        String s1 = new String( "some letters" );
        String s2 = "nogen bogstaver";
     
        // Wrappers.java:22: Incompatible type for if. Can't convert java.lang.Boolean to boolean.
//      if ( b1 ) {  // ERROR line
 
        if ( b1.booleanValue() ) {
            wrtln( "\"if ( b1.booleanValue() ) {...\" gives true." );
        } else {
            wrtln( "\"if ( b1.booleanValue() ) {...\" gives false." );
        } 

        if ( b2 ) {
            wrtln( "\"if ( b2 ) {...\" gives true." );
        } else {
            wrtln( "\"if ( b2 ) {...\" gives false." );
        }
       
        // Wrappers.java:37: Can't invoke a method on a boolean
//      if ( b2.booleanValue() ) {  // ERROR line
       
        wrtln( i1.toString(i1.intValue(),16) );
       
        // Wrappers.java:41: Can't invoke a method on a int.
//      wrtln( i2.toString(i2,16) );  // ERROR line

        wrtln( Integer.toString(i2,16) ); 
       
        wrtln( s1.substring(0,5) );
        wrtln( s2.substring(0,5) );
        wrtln( "en tredie streng".substring(0,5) );

    } //endmethod main

} //endclass Wrappers

det er kun med strenge du kan bruge en literal somom den lå indeni en klasse
Avatar billede arne_v Ekspert
17. maj 2003 - 21:20 #9
kristian>

Tid at lukke spørgsmålet ?
Avatar billede arne_v Ekspert
22. maj 2003 - 22:23 #10
??
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