2012-08-09 4 views
5
import java.util.ArrayList; 

public class ListOfClasses 
{ 

    private ArrayList<Class> classes; 

    public ArrayList<Class> getClasses() 
    { 
     return classes; 
    } 

    public void setClasses(ArrayList<Class> classes) 
    { 
     this.classes = classes; 
    } 
} 

Für diese parametriert werden, erhalte ich die folgende Warnung in Eclipse -Eclipse-Warnung - Klasse ist ein Rohtyp. Verweise auf generische Typ Klasse <T> sollte

Klasse ist eine rohe Art. Verweise auf generische Typklasse sollte parametrisierte

Diese werden in einem earlier question gefragt, aber die Antwort war spezifisch für das Spring Framework. Aber ich bekomme diese Warnung auch ohne etwas mit Spring zu tun zu haben. Also, wo liegt das Problem?

+0

Muss der Typ eine ArrayList sein? –

Antwort

9

Ich vermute, es beschwert sich, dass Klasse ein roher Typ ist. Sie können versuchen

private List<Class<?>> classes; 

oder unterdrücken Sie diese besondere Warnung.

Ich würde die Warnung in diesem Fall ignorieren. Ich würde auch eine defensive Kopie in Betracht ziehen.

private final List<Class> classes = new ArrayList<>(); 

public List<Class> getClasses() { 
    return classes; 
} 

public void setClasses(List<Class> classes) { 
    this.classes.clear(); 
    this.classes.addAll(classes); 
} 
1

Versuchen

public class ListOfClasses 
{ 

    private ArrayList<Class<?>> classes; 

    public ArrayList<Class<?>> getClasses() 
    { 
     return classes; 
    } 

    public void setClasses(ArrayList<Class<?>> classes) 
    { 
     this.classes = classes; 
    } 
} 

Klasse ein parametrisierte Typ als auch, und wenn Sie nicht über ein Typargument deklarieren, dann erhalten Sie eine Warnung für die Verwendung von rohen Typen, bei denen parametrisierte Typen zu erwarten sind.

0

Das Problem ist, dass Sie nichts über den Typ der zurückgegebenen Klasse sagen können. Diese Warnung ist nicht sehr nützlich. Da Sie nicht wissen, um welchen Typ von Klasse es sich handelt, können Sie keine Argumenttypen hinzufügen. Wenn Sie es tun, wie folgt:

public Class<? extends Object> getClasses {} 

Sie machen es nicht besser, da alles Object in Java erstreckt, mit Ausnahme Primitiven. Ich ignoriere diese Hinweise oder mache sie ab.

Verwandte Themen