嗨,我有这个问题:
XYChart.Series x = (XYChart.Series)((XYChart.Series)item).clone();
错误:clone()
在java.lang.Object
中具有受保护的访问权限
我该如何解决?
重要的是,x
是值的副本,不能指向克隆项目的指针。
答案 0 :(得分:1)
使用clone
要求该方法由类型实现。大部分(如果不是全部)JavaFX类都不会这样做,因为大多数类都包含可能附加了非克隆侦听器的属性。
这意味着您需要自己复制XYChart.Series
。
由于您需要该系列的深层副本,因此可以使用以下代码。根据您的使用情况,可能需要复制复制所有XYChart.Data
对象:
public static <S, T> XYChart.Series<S, T> copySeries(XYChart.Series<S, T> series) {
XYChart.Series<S, T> copy = new XYChart.Series<>(series.getName(),
series.getData().stream()
.map(data -> new XYChart.Data<S, T>(data.getXValue(), data.getYValue()))
.collect(Collectors.toCollection(FXCollections::observableArrayList)));
return copy;
}
如果不需要复制Data
对象,则可以将代码简化为
public static <S, T> XYChart.Series<S, T> copySeries(XYChart.Series<S, T> series) {
XYChart.Series<S, T> copy = new XYChart.Series<>(series.getName(),
FXCollections.observableArrayList(series.getData()));
return copy;
}