2015-12-11 2 views
1

У меня много классов контроллеров. И в каждом таком классе я использую код folliwng много раз:Создание нормального общего класса

tc_mt_buy_amount.setCellFactory(param -> { 
      return new TableCell<FaClConversionDeals, BigDecimal>(){ 
       @Override 
       protected void updateItem(BigDecimal item, boolean empty) { 
        super.updateItem(item, empty); 
        if(empty || item == null){ 
         setText(""); 
        } else { 
         setText(df.format(item)); 
        } 
       } 
      }; 
     }); 

tc_mt_sell_amount.setCellFactory(param -> { 
      return new TableCell<FaClConversionDeals, BigDecimal>(){ 
       @Override 
       protected void updateItem(BigDecimal item, boolean empty) { 
        super.updateItem(item, empty); 
        if(empty || item == null){ 
         setText(""); 
        } else { 
         setText(df.format(item)); 
        } 
       } 
      }; 
     }); 

Для того, чтобы не продублируйте код так много раз в каждом классе, я создал внутренний классы в каждом классе контроллера:

tc_mt_buy_amount.setCellFactory(param -> { 
       return new FormatMainColumn(); 
      }); 
tc_mt_sell_amount.setCellFactory(param -> { 
      return new FormatMainColumn(); 
     }); 

private class FormatMainColumn extends TableCell<FaClConversionDeals, BigDecimal> { 

     DecimalFormat df = new DecimalFormat("#,###.00"); 
     @Override 
    protected void updateItem(BigDecimal item, boolean empty) { 
     super.updateItem(item, empty); 
     if(empty || item == null){ 
      setText(""); 
     } else { 
      setText(df.format(item)); 
     } 
    } 
} 

Теперь, чтобы не писать внутренние классы в каждом контроллере, я хочу создать отдельный универсальный класс, где я могу ссылаться на каждый контроллер. Проблема заключается в том, что, например, FaClConversionDeals в приведенном выше примере отличается в каждом контроллере (то есть, это могут быть другие классы). В структурном отношении, он должен выглядеть примерно так:

От контроллера:

tc_mt_buy_amount.setCellFactory(param -> { 
        return new FormatMainColumn(ClassName); 
       }); 

Generic Класс:

private class FormatMainColumn(ClassName class) extends TableCell<ClassName, BigDecimal> { 

       DecimalFormat 

df = new DecimalFormat("#,###.00"); 
      @Override 
     protected void updateItem(BigDecimal item, boolean empty) { 
      super.updateItem(item, empty); 
      if(empty || item == null){ 
       setText(""); 
      } else { 
       setText(df.format(item)); 
      } 
     } 
    } 

ответ

1

Это не то, как дженерики синтаксис работы. Если я вас правильно понял, вы хотите, чтобы ваш класс объявлен как

private class FormatMainColumn<T> extends TableCell<T, BigDecimal> {

, а затем вы можете сделать return new FormatMainColumn<ClassName>();.

+0

Спасибо. Извините за такой простой вопрос – Sher

+0

Ну, дженерики не всегда легки. – Kayaman

Смежные вопросы