Zadeklarowałeś klasę Thingjako niestatyczną klasę wewnętrzną. Oznacza to, że musi być powiązany z instancjąHello klasy.
W swoim kodzie próbujesz utworzyć instancję Thing z kontekstu statycznego. Na to narzeka kompilator.
Istnieje kilka możliwych rozwiązań. Wybór rozwiązania zależy od tego, co chcesz osiągnąć.
Wyjdź Thingz Helloklasy.
Zmień Thingsię na staticklasę zagnieżdżoną.
static class Thing
Tworzenie instancji z Helloprzed utworzeniem instancji Thing.
public static void main(String[] args)
{
Hello h = new Hello();
Thing thing1 = h.new Thing(); // hope this syntax is right, typing on the fly :P
}
Ostatnie rozwiązanie ( niestatyczna klasa zagnieżdżona) byłoby obowiązkowe, gdyby jakakolwiek instancja Thingzależała od instancji, Helloaby była znacząca. Na przykład, gdybyśmy mieli:
public class Hello {
public int enormous;
public Hello(int n) {
enormous = n;
}
public class Thing {
public int size;
public Thing(int m) {
if (m > enormous)
size = enormous;
else
size = m;
}
}
...
}
każda surowa próba stworzenia obiektu klasy Thing, jak w:
Thing t = new Thing(31);
byłoby problematyczne, ponieważ nie byłoby oczywistej enormouswartości, aby przetestować 31 z nim. Wystąpienie hw Hellozewnętrznej klasy jest to konieczne, aby zapewnić to h.enormouswartości:
...
Hello h = new Hello(30);
...
Thing t = h.new Thing(31);
...
Ponieważ to nie znaczy, Thingjeśli nie ma Hello.
Aby uzyskać więcej informacji na temat klas zagnieżdżonych / wewnętrznych:
Zagnieżdżone klasy (samouczki Java)