2017-09-22 5 views
1

私はのIntelliJ IDEAアルティメット2017.2を実行すると、次のコードブロックにUnchecked assignment: 'anonymous javafx.scene.control.TableCell' to 'javafx.scene.control.TableCell<com.something.RepStats,java.lang.Integer>'警告検査を持っています:IntelliJ - これは未チェックの割り当てですか?

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 + ""); 
       } 
      }; 
     } 
    } 
); 

私はそれが起こっている理由を把握しようとしています。私がcall()メソッドをjavafx.scene.control.TableCellの代わりに返すIntelliJの提案に従うと、TableColumnTableCell<RepStats, Integer>を予期しているので、私は他のエラーが発生します。

+0

は、あなたではなく、生のテーブルセルの新しいテーブルセルを返す必要がないのですか? – synchronizer

答えて

3

TableCell(タイプパラメータなし)はタイプ情報がTableCell<RepStats, Integer>(これは別のテーブルビュー/アイテムの組み合わせの場合はTableCellになる可能性があるため)です。

それを修正するためには、適切のようなあなたのcall()実装でTableCellを入力返すために十分です:リターンはTableCell<RepStats, Integer>を入力するなどの方法が期待するためだとあなたがテーブルセルを返し

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

Java 9の場合、 'return new TableCell <>(){'(自分自身をテストしていませんが、ダイヤモンド演算子はJava 9で表記可能な型で動作するはずです)。 –

+0

Java 7で既に動作していませんか? –

+0

@ MarkPetersはJava 8で動作します。 MartinStettner、ありがとう、これは私のために働いた! – Zephyr

1

タイプは定義されていません。つまり、メソッドが予期する型をジェネリックに追加する必要があります。 これを試してみてください:

... 
return new TableCell<RepStats, Integer>() {...} 
関連する問題