javafx 图表,JavaFx - 推理变量

javafx charts,JavaFx - inference variable

我在我的项目中使用 javafx 图表并且 我想在 javafx 中创建一些 class get 2 type of date 和 return 不同的图表。 我想通用我的代码,但出现编译错误!! 编译器:jdk 9.

超类

public class ChartsModel <T,K> {

    private ObservableList<XYChart.Series<T,K>> list;
    protected    CategoryAxis xAxis;
    protected   NumberAxis yAxis;
    private void addnode(T name,K number)
    {
        XYChart.Series<T, K> series = new XYChart.Series<T, K>();
        series.getData().add(new XYChart.Data<T, K>(name, number));
        list.add(series);
    }

    protected void  cheraxyAxis(String xAxisname, String yAxisname) {
        xAxis = new CategoryAxis();
        xAxis.setLabel(xAxisname);
        yAxis = new NumberAxis();
        yAxis.setLabel(yAxisname);
    }

    protected void addGroup(T[] name,K[] number,int conter){
        for (int i=0;i<conter;i++)
            addnode(name[i],number[i]);
    }

    public ObservableList<XYChart.Series<T, K>> getList() {
        return list;
    }

    public CategoryAxis getxAxis() {
        return xAxis;
    }

    public NumberAxis getyAxis() {
        return yAxis;
    }


}

这是我的子class:

public class Barcharts<T ,K > extends ChartsModel <T,K>
{
    private Barcharts() {}
    public BarChart<T,K> getBarchart(String xAxisname, String yAxisname,String Title,T[] name,K[] number,int conter)
    {
        cheraxyAxis(xAxisname,yAxisname);
        BarChart<T,K> barChart;

        barChart = new BarChart<>(xAxis,yAxis);
        //Error!!!

        barChart.setTitle(Title);
        addGroup(name,number,conter);
        barChart.setData(getList());
        return barChart;

    }
}

但是当我使用这条线时它有效但不是通用的:

BarChart<String, Number> chart = new BarChart<>(xAxis, yAxis);

错误是: 错误:(13, 32) java:类型不兼容:无法推断 javafx.scene.chart.BarChart<> 的类型参数 原因:推理变量 X 具有不相容的等式约束 T,java.lang.String

A BarChart<X,Y>n(或者,一般来说,XYChart<X,Y>)需要一个 Axis<X> 类型的 xAxis 和一个 [=15] 类型的 yAxis =].您已将 xAxis 定义为 CategoryAxis,即 Axis<String>,将 yAxis 定义为 NumberAxis,即 Axis<Number>

因此,您可以使用这些特定轴创建的唯一类型 BarChartBarChart<String, Number>。编译器抱怨是因为对类型变量 TK 没有约束,这会强制它们分别为 StringNumber

不完全清楚您要在这里做什么。 BarChart 必须 使用一个 String 类型的轴和一个 Number 类型的轴。这些通常可以按任意顺序排列,但您的代码会创建一个垂直条形图(通过使用 CategoryAxis 作为 x-axis)。因此,您使用的数据 必须 Series<String, Number>,因此您必须将 T 作为 String,将 K 作为 [=27] =];类型变量的类型没有选择,所以根本没有必要制作这个泛型。