Avatar billede cvpcvp Nybegynder
26. november 2004 - 13:32 Der er 11 kommentarer og
1 løsning

Interface kald

Nu skal jeg se om jeg kan formulere mit problem korrekt....

jeg har et interface:

public interface IText {
    public void writeText();
}

Det er så meningen at andre skal skrive en implementation af dette interface.

Mit problem er nu at jeg gerne vil kalde writeText uden at kende til implementationen da det ikke er mig der skal lave den..
Kan det lade sig gøre?

F.eks. fra en anden klasse:

public class testClass{
      //kald writeText funktionen
}
Avatar billede laplands-ugle Nybegynder
26. november 2004 - 14:06 #1
Nu skal jeg så se om jeg kan formulere det her svar rigtigt ;)

Når du har dit interface IText med nogle metoder er det jo meningen du vil lave x antal implementationer ud fra det interface. Ideen med interfacet er så at du kan henvise til et objekt af typen IText i andre klasser uden at angive præcis hvilken implementation der er tale om, da du ved at alle klasser som implementerer interfacet IText har metoderne angivet i interfacet.

F.eks.

public class testClass{
    public testClass(IText impl){
        impl.writeText();
    }
}

Vil sørge for at lidegyldigt hvilken implementation af IText du giver den med som paramter vil writeText metoden blive udført, denne kan så have forskellig opførsel alt efter hvilken implementation af IText du har fodret den med.
Avatar billede cvpcvp Nybegynder
26. november 2004 - 14:18 #2
Hvis min implementation ser ud som følger... hvordan vil det hele så virke i en sammenhæng?

class TextImp implements IText
{
    public void writeText() {
        System.out.println("test udskrift");
    }
}
Avatar billede arne_v Ekspert
26. november 2004 - 14:21 #3
IText o = new TextImpl();
o.writeText()

eller

IText o = Class.forName("TextImpl").newInstance();
o.writeText()
Avatar billede cvpcvp Nybegynder
26. november 2004 - 14:23 #4
arne_v: det forudsætter vel at jeg kender min implmentation hvilket jeg i sidste ende ikke gør.... (eller hvad?)
Avatar billede arne_v Ekspert
26. november 2004 - 14:25 #5
Et eller andet sted skal implementationen kendes !

Men den sidste form gør at navnet på klassen f.eks. kan læses
fra en konfigurations fil.
Avatar billede cvpcvp Nybegynder
26. november 2004 - 14:29 #6
Mit problem er at jeg laver et extension point til et plug-in (i Eclipse) hvor det så skal være muligt for andre at lave extensions til mit plug-in.
Ved ikke hvor meget i har leget med Eclipse.
Der laver man et interface, som så af dem der laver en "extension" skal implmenteres.
Jeg vil gerne kalde writeText generelt og så skal den så gerne afvikle den implementation den enkelte har lavet.
Avatar billede cvpcvp Nybegynder
26. november 2004 - 14:30 #7
mit problem er at få kaldt funktionaliteten i dette interface...
Avatar billede laplands-ugle Nybegynder
26. november 2004 - 14:40 #8
Et eller andet sted bliver du nødt til at instantiere dit plugin til en eller anden implementation af det interface du ønsker, da du jo ikke kan lave kaldene direkte på interfacet.

Men du kan jo eventuelt have en metode i dit plugin der der gør det muligt at skifte implementation.
Avatar billede arne_v Ekspert
26. november 2004 - 18:39 #9
Typisk vil man angive navnet på implementationen i en konfiguration og så
loade dynamisk som jeg beskrev
Avatar billede arne_v Ekspert
12. december 2004 - 19:40 #10
OK ?
Avatar billede cvpcvp Nybegynder
13. december 2004 - 08:19 #11
Ja, sorry.... har lige ligget syg... rigtig trals...

Kan du ikke også lige ligge et svar laplands-ugle?
Avatar billede cvpcvp Nybegynder
10. januar 2005 - 14:47 #12
Nå, nu har vi vist ventet længe nok... så får du bare dem alle arne_v
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