2017-09-22 2 views
1

Ich bin mit IntelliJ IDEA Ultimative 2017,2 und eine Inspektion haben Unchecked assignment: 'anonymous javafx.scene.control.TableCell' to 'javafx.scene.control.TableCell<com.something.RepStats,java.lang.Integer>' auf den folgenden Codeblock Warnung:IntelliJ - Warum ist das eine ungeprüfte Aufgabe?

colTopRepsRank.setCellFactory(new Callback<TableColumn<RepStats, Integer>, TableCell<RepStats, Integer>>() { 
     @Override 
     public TableCell<RepStats, Integer> call(TableColumn<RepStats, Integer> param) { 
      return new TableCell() { 
       @Override 
       protected void updateItem(Object item, boolean empty) { 
        super.updateItem(item, empty); 
        setGraphic(null); 
        setText(empty ? null : getIndex() + 4 + ""); 
       } 
      }; 
     } 
    } 
); 

Ich versuche, warum passiert das heißt, um herauszufinden. Wenn ich dem IntelliJ-Vorschlag folge, die call()-Methode stattdessen nur eine javafx.scene.control.TableCell zurückgeben, erhalte ich andere Fehler, weil die TableColumn die TableCell<RepStats, Integer> erwartet.

+0

Sie nicht einen neuen Tablecell anstelle eines rohen Tablecell zurückkehren müssen? – synchronizer

Antwort

3

Sie erhalten den Fehler, weil TableCell (ohne Typparameter) hat weniger Typ Informationen als TableCell<RepStats, Integer> (die ehemalige könnte eine TableCell für eine andere Tabellenansicht/Element Kombination sein).

Um es zu beheben, sollte es genügen, ein richtig TableCell wie in Ihrer call() Implementierung getippt zurückzukehren:

return new TableCell<RepStats, Integer>() { 
    @Override 
    protected void updateItem(Integer item, boolean empty) { 
    // ... 
    } 
} 
+2

Oder jetzt mit Java 9, 'return new TableCell <>() {' (habe nicht selbst getestet, aber Diamant-Operator sollte in Java 9 auf denotable Typen arbeiten). –

+0

Funktioniert das nicht schon mit Java 7? –

+0

@MarkPeters, die in Java 8 funktioniert. MartinStettner, danke; Das hat für mich geklappt! – Zephyr

1

Das ist, weil die Methode erwartet als eine Rückkehr eine TableCell<RepStats, Integer> eingeben und Sie geben einen Tablecell, wo die Typen sind nicht definiert. Das bedeutet, dass Sie generic mit den von der Methode erwarteten Typen hinzufügen sollten. Try this:

... 
return new TableCell<RepStats, Integer>() {...}