2017-04-01 3 views
0

Bitte, bevor diese in die doppelten Eimer werfen, erbarmt und ein ‚Neuling‘ Java helfen ... mein Code:java: jGrasp unkontrolliert oder unsichere Operationen

//at top of class 
List<String> faceStrList    = new ArrayList<String>(cardsPerSuit); 

Dann wird die Linie (in einem anderen Verfahren), die die beanstandeten andere Methode verwendet:

faceStrList = readInfo(cardValueFileStr, faceStrList); 

und das Problem-Kind:

public static List readInfo(String inputFile, List<String> dataArrayOfStr) 
{ 
    String word = 'dummy'; 
    dataArrayOfStr.add(word); 
    return dataArrayOfStr; 
} 

Auch hier bitte schau freundlich.

Antwort

0

Sie müssen nur Compiler sagen, dass Sie eine Liste von String zurückgeben

public static List<String> readInfo(String inputFile, List<String> dataArrayOfStr) 
{ 
    String word = "dummy"; 
    dataArrayOfStr.add(word); 
    return dataArrayOfStr; 
} 

Der java.util.List Schnittstelle ist ein Subtyp der java.util.Collection Schnittstelle. Es stellt eine geordnete Liste von Objekten, dh Sie können die Elemente einer Liste in einer bestimmten Reihenfolge zugreifen können, und durch einen Index zu

Sie haben bereits definiert faceStrList eine Liste von String ist. Dann weisen Sie der Variablen eine Liste eines beliebigen Typs zu.

Es wird kein Compiler-Fehler erstellt, aber es wäre besser, wenn Sie angeben können, dass Sie eine Liste der Zeichenfolge an den Compiler zurückgeben.

0

hier:

public static List readInfo(

Sie haben Ihre Generika "richtige" ganz über dem Platz; aber nicht, wenn diese Methode deklariert wird. Sie sind weglassen der generische Typ für die zurückgegebene Liste; Geben Sie stattdessen einen Raw-Typ ein (Details siehe here). Und darum warnt der Compiler Sie.

So ist die Lösung einfach die gleiche Sache zu tun, die man in anderen Orten haben, und ändern Sie die Methode Signatur

public static List<String> readInfo( 

Und für die Aufnahme:

List<String> faceStrList = new ArrayList<String>(cardsPerSuit); 

vereinfacht werden könnte wie

List<String> faces = new ArrayList<>(cardsPerSuit); 
  • Sie weglassen der generische Typ, der den Diamantoperator <> verwendet; keine Notwendigkeit, diese Informationen zu wiederholen
  • Darüber hinaus: Es gibt keinen Sinn in setzen den Sammlungs-Typ in Ihren Variablennamen. Machen Sie einfach klar "es ist mehr als eins". Der Punkt ist: Vielleicht möchten Sie später den Sammlungs-Typ ändern. Glauben Sie mir, Sie werden es satt, alle Ihre Variablen dann umzubenennen!
  • Es ist nicht gerade eine gute Praxis, zurückgeben die Liste, die als Parameter bereits kommt. Und es ist auch nicht erforderlich - etwas zur Liste hinzuzufügen, wie Sie es bereits tun, wirkt sich bereits auf diese eingehende Liste aus. Um diese Liste zurückzugeben, wird Ihre Schnittstelle einfach "komplizierter" zu verstehen.
Verwandte Themen