【问题标题】:javafx charts,JavaFx - inference variablejavafx 图表,JavaFx - 推理变量
【发布时间】:2018-03-26 10:44:45
【问题描述】:

我在我的项目中使用 javafx 图表,并且 我想创建一些类获取 2 类型的日期并在 javafx 中返回不同的图表。 我想通用我的代码但得到编译错误! 编译器: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;
    }


}

这是我的子类之一:

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

【问题讨论】:

    标签: java javafx javafx-8 javafx-2


    【解决方案1】:

    BarChart&lt;X,Y&gt;n(或通常是XYChart&lt;X,Y&gt;)需要Axis&lt;X&gt; 类型的xAxisAxis&lt;Y&gt; 类型的yAxis。您已将xAxis 定义为CategoryAxis,即Axis&lt;String&gt;,将yAxis 定义为NumberAxis,即Axis&lt;Number&gt;

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

    您在这里尝试做什么并不完全清楚。 BarChart 必须使用一个 String 类型的轴和一个 Number 类型的轴。这些通常可以按任意顺序排列,但您的代码会创建一个垂直条形图(通过使用 CategoryAxis 作为 x 轴)。因此,您使用的数据必须Series&lt;String, Number&gt;,因此您必须将T 设置为String,将K 设置为Number;类型变量的类型没有选择余地,因此完全没有必要将其泛型化。

    【讨论】:

    • 非常感谢。我将 CategoryAxis 更改为 Axis 和 NumberAxis 更改为 Axis 并修复?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-23
    • 2015-12-09
    • 1970-01-01
    • 2017-04-11
    • 1970-01-01
    • 2017-08-03
    • 2020-07-22
    相关资源
    最近更新 更多