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>
。
因此,您可以使用这些特定轴创建的唯一类型 BarChart
是 BarChart<String, Number>
。编译器抱怨是因为对类型变量 T
和 K
没有约束,这会强制它们分别为 String
和 Number
。
不完全清楚您要在这里做什么。 BarChart
必须 使用一个 String
类型的轴和一个 Number
类型的轴。这些通常可以按任意顺序排列,但您的代码会创建一个垂直条形图(通过使用 CategoryAxis
作为 x-axis)。因此,您使用的数据 必须 是 Series<String, Number>
,因此您必须将 T
作为 String
,将 K
作为 [=27] =];类型变量的类型没有选择,所以根本没有必要制作这个泛型。
我在我的项目中使用 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>
。
因此,您可以使用这些特定轴创建的唯一类型 BarChart
是 BarChart<String, Number>
。编译器抱怨是因为对类型变量 T
和 K
没有约束,这会强制它们分别为 String
和 Number
。
不完全清楚您要在这里做什么。 BarChart
必须 使用一个 String
类型的轴和一个 Number
类型的轴。这些通常可以按任意顺序排列,但您的代码会创建一个垂直条形图(通过使用 CategoryAxis
作为 x-axis)。因此,您使用的数据 必须 是 Series<String, Number>
,因此您必须将 T
作为 String
,将 K
作为 [=27] =];类型变量的类型没有选择,所以根本没有必要制作这个泛型。