2012-06-20 3 views
0

В приложении JavaFX я приложил ChangeListener к TableCelltableRowProperty, который имеет тип ChangeListener<? super TableRow>TableRow<T> также является общим).Непроверенное предупреждение для ChangeListener <? super TableRow> -Параметр

Что я сделал следующее:

public final class PairingResultEditingCell extends TableCell<Pairing, Result> { 

    private final ChoiceBox<Result> choiceField; 

    // Unchecked casts and raw types are needed to wire the 
    // tableRowProperty changed listener 
    @SuppressWarnings({ "unchecked", "rawtypes" }) 
    private PairingResultEditingCell() { 

     super(); 
     this.choiceField = new ChoiceBox<Result>(); 
     // ReadOnlyObjectProperty<TableRow> javafx.scene.control.TableCell.tableRowProperty() 
     this.tableRowProperty() 
      // this cast is the actual source of the warnings 
      // rawtype of TableRow<T>: ChangeListener<? super TableRow> 
      .addListener((ChangeListener<? super TableRow>) new ChangeListener<TableRow<Result>>() { 

       @Override 
       public void changed(
         final ObservableValue<? extends TableRow<Result>> observable, 
         final TableRow<Result> oldValue, 
         final TableRow<Result> newValue) { 
        choiceField.setVisible(newValue.getItem() != null); 
       } 
      }); 
    } 
} 

мне нужно два Подавить два вида предупреждений, чтобы сделать это: @SuppressWarnings({ "unchecked", "rawtypes" }). Предупреждение rawtype выглядит как Только Eclipse. Однако сервер Jenkins CI отказывается компилировать код из-за первого (и я не могу изменить его конфигурацию).

Есть ли способ сделать это без безударных слепок и сырых типов? Я попробовал внутренний класс, реализующий интерфейс, но я застрял. Я также борюсь с синтаксисом Java ? super MyClass.

+0

Можете ли вы показать определение класса? – assylias

+0

Конечно, спасибо за чтение до сих пор. Я добавил объявление своего класса «PairingResultEditingCell» и некоторые ссылки на документы Oracle. –

+0

Где именно находится ваш 'tableRowProperty'? Что еще более важно, каков его общий тип? 'ReadOnlyObjectProperty' является общим, поэтому мы должны предположить, что определение' tableRowProperty' является общим. –

ответ

1

Я не получаю никаких предупреждений со следующим кодом:

public final class PairingResultEditingCell extends TableCell<Pairing, Result> { 

    private final ChoiceBox<Result> choiceField; 

    private PairingResultEditingCell() { 

     super(); 
     this.choiceField = new ChoiceBox<Result>(); 

     ReadOnlyObjectProperty<TableRow> roop= this.tableRowProperty(); 
     this.tableRowProperty().addListener(new ChangeListener<TableRow>() { 
      @Override 
      public void changed(ObservableValue<? extends TableRow> observable, TableRow oldValue, TableRow newValue) { 
       choiceField.setVisible(newValue.getItem() != null); 
      } 
     }); 
    } 
} 
+0

Спасибо. Я все еще получаю необработанный тип предупреждение, но я мог бы избавиться от неконтролируемого актера с этим. –

+0

Возможно, это будет самое чистое, что я могу получить, а сервер CI доволен им. Поэтому актуальная проблема решена. –

+0

@Mudu Вы должны быть в состоянии избавиться от это предупреждение тоже, но не знаю, как ... – assylias