2016-03-14 10 views
6

Neden aşağıdaki kod tamam, ancak ana olarak bir T ana eklendiğinde, aşağıdaki hatayı atar?'Main.this' dış sınıfın doğrulanmış olması durumunda statik bir bağlamdan referans alınamıyor

'Main.this' ı generics restrictions geçti statik bağlamda

//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 

     } 
    } 
} 

başvurulan olamaz ama bu bir hata içine sonuçlanır neden alamadım. Aynı zamanda pek çok benzer sorudan da geçtim ama neden jenerik eklemenin durumu değiştireceğini anlamıyorum.

+1

; bu daha da belirsiz hata mesajları yol açabilecek muhtemel nedeni

public TestStatic(Main<T>.TestNonStatic nonStatic) { 
Neden, bazı varsayılan davranışı yok. Kabul ettim ve kabul ettim. Birisi benim yapabildiğimden önce bunu devirmeye karar verdi. – Makoto

cevap

4

Sizin TestNonStatic bunu bir ham tip

public TestStatic(Main.TestNonStatic nonStatic) { 

veya genel tür

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

veya statik olmayan sınıf

private class TestStatic { 
    public TestStatic(/*Main<T>.*/TestNonStatic nonStatic) { 
kullanarak olup olmadığını belirlemek zorunda olan örtük bir jenerik vardır

Aşağıdaki gibi, sınıfın staticolduğu gibi, zımni olarak kabul edilmeyecektir.) Gayet

İlgili konular