Michael Berg wrote:
>
<klipp klipp>
>
> Ja. Ok. Heraf følger jo at interfaces ikke kan indeholde statiske metoder. Men årsagen er så kun at "man har bestemt" at sådan skal det være? Sikke noget slendrian ..
>
> Det er jo ikke nogen kæmpe svaghed i sproget, det var nærmest tilfældigt at jeg faldt i en situation hvor jeg godt kunne have brugt det. Mit spørgsmål var sådan set mest af nysgerrighed, for jeg har for længst løst mit problem ved at bruge ikke-statiske metoder.
>
> Men tak alligevel - det var oplysende
>
> Mvh Michael
Heisann, håper det er ok for en normann å komme et par innspill.
Eg kom opp i samme situasjon (ønsket om static metoder i interface) i
min pågående hovedfagsoppgave (til graden cand scient), og tenkte å dele
det 'hack' eg har brukt for å løse dette problemet. Ikke vakkert, men
det fungerer på et vis.
public interface A{
//some methods
public static class Statics{
protected static String dummy = "dummy";
public static String calculateFooValue(long a, long b){
return a + "*" + b + " = " + (a*b) + dummy;
}
//more static methods
}
}
public class B implements A{
//some content
}
Det er nå muligt å skrive
B.Statics.calculateFoovalue( 3, 5 );
En av grunnene til å ønske static metoder (og variabler for den del) i
interface må dette være for å kunne dele metodeimplemeteringer mellom de
klasser som implementerer interfacet. Slike metoder må være av en slik
art at de ikke jobber på objectdata (på samme måte som andre statiske
metoder), og det vil derfor ofte være det som kan kales for støtte
metoder.
Det å definere
public interface A{
public static String calculateFooValue(long a, long b);
}
og så
public class B implements A{
public static String calculateFooValue(long a, long b){
return a + "*" + b + " = " + (a*b);
}
}
gir (som sagt mange andre steder i denne diskusjonen) ingen/liten
mening.
Min bruk oppstod i forbindelse med object fabrikker med plugin baserte
'factorycontexts' og et slags singleton pattern opp alt dette. Løsningen
kan kalles aksepttabel, men ikke god.
RAGgen
--
(...)det er en skam for en mann å ha langt hår.
1. Kor. 11:14