Michael Berg wrote:
> Hej Alle,
>
> Jeg har en klasse med en statisk metode:
>
> package min.pakke;
> public MyClass {
> public static void doSomething();
> }
>
> Godt så. Et andet sted i koden har jeg brug for at kalde den statiske
> metode udfra et klassenavn (dvs. dynamisk), men uden at instantiere
> objektet. Dvs. den gode gamle
>
> Class.forName("min.pakke.MyClass").newInstance().doSomething();
>
> Duer ikke, for her får jeg jo netop lavet en instans. Så opgaven går
> altså ud på at give programmøren muligheder svarende til:
>
> min.pakke.MyClass.doSomething();
>
> Med den undtagelse at klassen skal kunne loades dynamisk - eksempelvis:
>
> getMyClass().doSomething();
>
> En lille ekstra krølle er at det selvfølgelig skal virke med afledte
> udgaver af MyClass.
>
[SNIP]
Jeg er ikke helt sikker på at jeg forstår dit spørgsmål: Finten ved
statiske metoder er jo netop at man ikke kalder dem på "objektniveau",
men på "klasseniveau". Dvs. følgende compiler og kører fint:
public class StaticTest {
public static void main(String[] args) {
StaticThing.testStatic();
}
}
class StaticThing {
public static void testStatic() {
System.out.println("Virker dette?");
}
}
rolft@Rudiger
/kode/java$ java StaticTest
Virker dette?
Dvs. jeg kalder den statiske metode udfra et klassenavn.
Hvis det ikke var det du tænkte på, så ved jeg ikke helt hvad du mener.
måske er det noget med at det kun er muligt at instantiere eet objekt?
Dette kan opnås ved at lade constructoren være private og returnere den
samme reference hvergang en getInstance() metode kaldes:
private RegistryClient(String host, int port) {
[SNIP noget kode, men bemærk private constructor]
}
private static RegistryClient rc =
new RegistryClient(Address.getHostServer(),Address.getPortServer());
public static RegistryClient getReg() { return rc; }
/Rolf
--
"A good magician never reveals his secret; the unbelievable trick
becomes simple and obvious once it is explained. So too with UNIX."