trzeba odniesienie do klasy "zewnętrznej" (która tak naprawdę nie jest klasą zewnętrzną).
Zakładając, że piszesz swój kod w pliku Script.groovy
, generuje dwie klasy: C.class
i Script.class
. Nie ma sposobu na wywołanie metody C
, ponieważ nie ma ona pojęcia, gdzie jest zdefiniowana.
Masz kilka opcji:
1) @ idei MichaelEaster użytkownika, dając defition metaklasa z bieżącego zakresu (tj Script
)
2) Tworzenie/zdać Script
obiekt wewnątrz C
:
def f() { "f" }
class C
{
public h(s = new Script()) { s.f() }
}
assert "f" == new C().h()
3) Bądź C
klasa wewnętrzna (który również potrzebuje wystąpienie Script
:
class Script {
def f() { "f" }
class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C(new Script()).h()
}
}
4) statyczna klasa wewnętrzna oraz statyczne f()
: odpowiedź
class Script {
static def f() { "f" }
static class C
{
public h() { f() }
}
static main(args) {
assert "f" == new C().h()
}
}
Plus @ dmahapatro za :-) – Will
dobrze wyjaśnione. Nie mogę podać tego wyjaśnienia z mojego telefonu, więc zaproponowałem łatwy. ;) – dmahapatro