Avatar billede Droa Seniormester
06. august 2012 - 18:28 Der er 3 kommentarer og
1 løsning

multi construct overload af extended class

Jeg har en Super klasse, med en masse forskellige Constructs.


public ResourceDownloader(ResourceListener callback){
        this.callback = callback;
    }
   
    /**
    * @param callback - callback interface
    */
    public ResourceDownloader(String logger){
        this.logger = Logger.getLogger(logger);
    }
   
    /**
    * @param logger - The Logger name to log data too
    * @param callback - callback interface
    */
    public ResourceDownloader(String logger,ResourceListener callback){
        this.logger = Logger.getLogger(logger);
        this.callback = callback;
    }


også en klasse der extender den

public ResourceManager(String localfolder,String resourcefile) {
        super();
        this.localfolder = localfolder;
        this.resourcefile = resourcefile;
    }
   
    public ResourceManager(String localfolder,String resourcefile, ResourceListener callback) {
        super(callback);
        this.localfolder = localfolder;
        this.resourcefile = resourcefile;
    }
   
    public ResourceManager(String localfolder,String resourcefile, String logger) {
        super(logger);
        this.localfolder = localfolder;
        this.resourcefile = resourcefile;
    }
   
    public ResourceManager(String localfolder,String resourcefile, String logger, ResourceListener callback) {
        super(logger,callback);
        this.localfolder = localfolder;
        this.resourcefile = resourcefile;
    }


problemet er lidt at jeg ikke kan bruge this(localfolder,resourcefile); da java ikke godkender både super() og this() i samme construct... som gør jeg er nød til at sætte variablerne manuelt istedet for at kunne gøre det med constructet.. som os vil skabe at paradoks, da jeg også kalder super() i this(), er der nogen måde at fikse det på, uden at skulle lave en methode der difiniere mine variabler den vej igennem?

mange tak
Avatar billede arne_v Ekspert
06. august 2012 - 18:39 #1
Brug this og lad den endelige constructor kalde super.
Avatar billede Droa Seniormester
06. august 2012 - 18:44 #2
jatak.. jeg så os jeg havde gjort det mere besværligt for mig selv end det behøvede at være. og brugte this() istedet for.. bliver der lagt et svar? :)
tak for hjælpen
Avatar billede arne_v Ekspert
06. august 2012 - 18:46 #3
svar
Avatar billede arne_v Ekspert
06. august 2012 - 18:56 #4
Eksempel:

public class Test {
    public static void main(String[] args) {
        System.out.println(new C(123.456));
        System.out.println(new C(123, 123.456));
        System.out.println(new C("ABC", 123.456));
        System.out.println(new C(123, "ABC", 123.456));
    }
}

class P {
    private int iv;
    private String sv;
    public P() {
        this(0, "");
    }
    public P(int iv) {
        this(iv, "");
    }
    public P(String sv) {
        this(0, sv);
    }
    public P(int iv, String sv) {
        this.iv = iv;
        this.sv = sv;
    }
    @Override
    public String toString() {
        return iv + " |" + sv + "|";
    }
}

class C extends P {
    private double xv;
    public C(double xv) {
        this(0, "", xv);
    }
    public C(int iv, double xv) {
        this(iv, "", xv);
    }
    public C(String sv, double xv) {
        this(0, sv, xv);
    }
    public C(int iv, String sv, double xv) {
        super(iv, sv);
        this.xv = xv;
    }
    @Override
    public String toString() {
        return super.toString() + " " + xv;
    }
}
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