【发布时间】:2018-12-16 22:53:21
【问题描述】:
大家好,我有这个问题:
XYChart.Series x = (XYChart.Series)((XYChart.Series)item).clone();
错误:clone() 在java.lang.Object 中具有受保护的访问权限
我该如何解决?
x 是一个值的副本并且不是指向克隆项的指针,这一点很重要。
【问题讨论】:
标签: java javafx charts clone linechart
大家好,我有这个问题:
XYChart.Series x = (XYChart.Series)((XYChart.Series)item).clone();
错误:clone() 在java.lang.Object 中具有受保护的访问权限
我该如何解决?
x 是一个值的副本并且不是指向克隆项的指针,这一点很重要。
【问题讨论】:
标签: java javafx charts clone linechart
使用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;
}
【讨论】: