java - 制作普通的泛型类

标签 java javafx

我有很多 Controller 类。在每个这样的类中,我多次使用以下代码:

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

为了不在每个类中多次重复代码,我在每个 Controller 类中创建了一个内部类:

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

现在,为了不在每个 Controller 中编写内部类,我想创建独立的泛型类,以便我可以从每个 Controller 中引用。问题在于,例如,上面示例中的 FaClConversionDeals 在每个 Controller 中都是不同的(即,它可能是其他类)。从结构上看,它应该类似于:

来自 Controller :

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

通用类:

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

最佳答案

这不是泛型语法的工作原理。如果我理解正确的话,你希望你的类声明为

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

然后你可以做return new FormatMainColumn<ClassName>(); .

关于java - 制作普通的泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34217710/

相关文章:

Java - BitSet 为整数

css - 当文本太长时创建滚动文本

java - 在 javafx 中创建图像缩略图

java - 使用 JFXDecorator 时组件不会自动调整大小,如何解决?

JavaFX tabpane 选项卡不切换

java - TLS Android 的问题 - Netty

java - ApplicationContextInitializer 相关异常在 STS 中部署到 vFabric tc Server 时

java - 检查类是否包含方法

java - 使用 JSON 获取数据

JavaFX HTMLEditor 想要焦点内容编辑器