2015-06-02 30 views
5

Cóż, mam interfejs, który jest;java ostrzeżenie o typie wieloznacznym

public interface abc { 
    public<T extends JPanel> T initalize(); 
} 

I wdrażam to. Tutaj jest rzeczą, kiedy definiowania funkcji, takich jak:

public class Startup_thePanel extends JPanel implements abc { 
    public Startup_thePanel initalize() { 

      return this; 
    } 
} 

dostaję ostrzeżenie o funkcji initalize który jest „bezpieczeństwo Typ: Wyrażenie typu ... potrzebuje niesprawdzony konwersji w celu dostosowania do ...”.

Mogę się tego pozbyć za pomocą suppresswarning, ale nie chcę z niego korzystać. Czego mi brakuje ?

góry dzięki ...

+1

Czy należy dodać całą ostrzeżenie? Przy okazji, powinieneś zaimplementować metodę 'initialize' z' @ Override'. – Tom

+0

Tak, masz rację, dziękuję za informację, ale dostałem właściwą odpowiedź poniżej. –

Odpowiedz

6
public interface abc<T extends JPanel> { 
    public T initalize(); 
} 

public class Startup_thePanel extends JPanel implements abc<Startup_thePanel> { 
    public Startup_thePanel initalize() { 

      return this; 
    } 
} 

uczyniłoby to kompilator wiedzieć, jaki rodzaj interfejsu swój wdrażają.

+0

dziękuję za uwagę, to rozwiązało problem. –

4

spróbować

public interface abc<T extends JPanel> { 
    public T initalize(); 
} 


public class Startup_thePanel extends JPanel implements abc<Startup_thePanel> { 

    private static final long serialVersionUID = 1L; 

    @Override 
    public Startup_thePanel initalize() { 

      return this; 
    } 
} 
+1

Nie usunąłbym górnej granicy typu ogólnego "T". – Tom

+1

OK, więc zaktualizowałem moją odpowiedź :) –

+0

to również jest racja, dziękuję ... –

Powiązane problemy