2016-03-14 11 views
6

Dlaczego poniższy kod jest prawidłowy, ale jak tylko T zostanie dodany do Main jako generyczny, zgłasza następujący błąd?Nie można odwoływać się do "Main.this" z kontekstu statycznego, jeśli zewnętrzna klasa jest generowana

'Main.this' nie można odwoływać się od statycznego kontekście

//public class Main<T> { - uncomment this for the error to appear 

public class Main { 
    public static void main(String[] args) { 
     new Main(); 
    } 

    class TestNonStatic {} 

    private static class TestStatic { 
     public TestStatic(TestNonStatic nonStatic) { //this is the line that fails 

     } 
    } 
} 

I przeszedł generics restrictions ale ja nie rozumiem, dlaczego to wyniki do błędu. Przeszedłem również wiele podobnych pytań, ale nie rozumiem, dlaczego dodanie generycznych zmieni sytuację.

+1

że jest w porządku. Przyznaję, że rzuciłem okiem na to i zgodziłem się. Cieszę się, że ktoś postanowił to zmienić, zanim zdołałem. – Makoto

Odpowiedz

4

Twój TestNonStatic ma niejawna generycznych, które trzeba określić, czy jest to typ surowej

public TestStatic(Main.TestNonStatic nonStatic) { 

lub ogólny typ

public TestStatic(Main<String>.TestNonStatic nonStatic) { 

lub przy użyciu non-statyczną klasę

private class TestStatic { 
    public TestStatic(/*Main<T>.*/TestNonStatic nonStatic) { 

Nie będzie domyślnie przyjmować następujących, ponieważ klasa jest static

public TestStatic(Main<T>.TestNonStatic nonStatic) { 

Dlaczego nie jakieś domyślne zachowanie, prawdopodobnie dlatego, że może to doprowadzić do jeszcze bardziej niejasnych komunikatów o błędach;)

Powiązane problemy